mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 05:21:57 +00:00
add sorting server side po and expense
This commit is contained in:
@@ -65,6 +65,8 @@ func (u *ExpenseController) GetAll(c *fiber.Ctx) error {
|
|||||||
RealizationStatus: strings.TrimSpace(c.Query("realization_status", "")),
|
RealizationStatus: strings.TrimSpace(c.Query("realization_status", "")),
|
||||||
ProjectFlockID: uint64(c.QueryInt("project_flock_id", 0)),
|
ProjectFlockID: uint64(c.QueryInt("project_flock_id", 0)),
|
||||||
ProjectFlockKandangID: uint64(c.QueryInt("project_flock_kandang_id", 0)),
|
ProjectFlockKandangID: uint64(c.QueryInt("project_flock_kandang_id", 0)),
|
||||||
|
SortBy: strings.TrimSpace(c.Query("sort_by", "")),
|
||||||
|
SortOrder: strings.TrimSpace(c.Query("sort_order", "")),
|
||||||
}
|
}
|
||||||
|
|
||||||
if isAllExpenseExcelExportRequest(c) {
|
if isAllExpenseExcelExportRequest(c) {
|
||||||
|
|||||||
@@ -289,7 +289,40 @@ func (s expenseService) GetAll(c *fiber.Ctx, params *validation.Query) ([]expens
|
|||||||
like,
|
like,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return db.Order("expenses.created_at DESC").Order("expenses.updated_at DESC")
|
sortBy := strings.TrimSpace(params.SortBy)
|
||||||
|
sortOrder := strings.ToUpper(strings.TrimSpace(params.SortOrder))
|
||||||
|
if sortOrder == "" {
|
||||||
|
sortOrder = "DESC"
|
||||||
|
}
|
||||||
|
|
||||||
|
switch sortBy {
|
||||||
|
case "reference_number":
|
||||||
|
return db.Order("expenses.reference_number " + sortOrder)
|
||||||
|
case "transaction_date":
|
||||||
|
return db.Order("expenses.transaction_date " + sortOrder)
|
||||||
|
case "realization_date":
|
||||||
|
return db.Order("expenses.realization_date " + sortOrder)
|
||||||
|
case "location":
|
||||||
|
return db.Order("(SELECT COALESCE(name,'') FROM locations WHERE id = expenses.location_id) " + sortOrder)
|
||||||
|
case "created_user":
|
||||||
|
return db.Order("(SELECT COALESCE(name,'') FROM users WHERE id = expenses.created_by) " + sortOrder)
|
||||||
|
case "supplier":
|
||||||
|
return db.Order("(SELECT COALESCE(name,'') FROM suppliers WHERE id = expenses.supplier_id) " + sortOrder)
|
||||||
|
case "grand_total":
|
||||||
|
return db.Order(`(SELECT COALESCE(
|
||||||
|
(SELECT SUM(er.qty * er.price) FROM expense_realizations er
|
||||||
|
JOIN expense_nonstocks en ON en.id = er.expense_nonstock_id
|
||||||
|
WHERE en.expense_id = expenses.id),
|
||||||
|
(SELECT SUM(en2.qty * en2.price) FROM expense_nonstocks en2
|
||||||
|
WHERE en2.expense_id = expenses.id),
|
||||||
|
0)) ` + sortOrder)
|
||||||
|
case "is_paid":
|
||||||
|
return db.Order("expenses.is_paid " + sortOrder)
|
||||||
|
case "created_at":
|
||||||
|
return db.Order("expenses.created_at " + sortOrder)
|
||||||
|
default:
|
||||||
|
return db.Order("expenses.created_at DESC").Order("expenses.updated_at DESC")
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
if scopeErr != nil {
|
if scopeErr != nil {
|
||||||
|
|||||||
@@ -54,6 +54,8 @@ type Query struct {
|
|||||||
RealizationStatus string `query:"realization_status" validate:"omitempty,max=100"`
|
RealizationStatus string `query:"realization_status" validate:"omitempty,max=100"`
|
||||||
ProjectFlockID uint64 `query:"project_flock_id" validate:"omitempty,gt=0"`
|
ProjectFlockID uint64 `query:"project_flock_id" validate:"omitempty,gt=0"`
|
||||||
ProjectFlockKandangID uint64 `query:"project_flock_kandang_id" validate:"omitempty,gt=0"`
|
ProjectFlockKandangID uint64 `query:"project_flock_kandang_id" validate:"omitempty,gt=0"`
|
||||||
|
SortBy string `query:"sort_by" validate:"omitempty,oneof=reference_number transaction_date realization_date location created_user supplier grand_total is_paid created_at"`
|
||||||
|
SortOrder string `query:"sort_order" validate:"omitempty,oneof=asc desc ASC DESC"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateRealization struct {
|
type CreateRealization struct {
|
||||||
|
|||||||
@@ -102,6 +102,8 @@ func buildPurchaseQuery(c *fiber.Ctx) *validation.Query {
|
|||||||
ProjectFlockID: uint(c.QueryInt("project_flock_id", 0)),
|
ProjectFlockID: uint(c.QueryInt("project_flock_id", 0)),
|
||||||
ProjectFlockKandangID: uint(c.QueryInt("project_flock_kandang_id", 0)),
|
ProjectFlockKandangID: uint(c.QueryInt("project_flock_kandang_id", 0)),
|
||||||
ProductCategoryID: strings.TrimSpace(c.Query("product_category_id")),
|
ProductCategoryID: strings.TrimSpace(c.Query("product_category_id")),
|
||||||
|
SortBy: strings.TrimSpace(c.Query("sort_by", "")),
|
||||||
|
SortOrder: strings.TrimSpace(c.Query("sort_order", "")),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -261,7 +261,46 @@ func (s *purchaseService) GetAll(c *fiber.Ctx, params *validation.Query) ([]enti
|
|||||||
db = applyPurchaseApprovalStatusFilter(db, approvalStatuses)
|
db = applyPurchaseApprovalStatusFilter(db, approvalStatuses)
|
||||||
db = applyPurchaseSearchFilter(db, search)
|
db = applyPurchaseSearchFilter(db, search)
|
||||||
|
|
||||||
return db.Order("created_at DESC").Order("purchases.id DESC")
|
sortBy := strings.TrimSpace(params.SortBy)
|
||||||
|
sortOrder := strings.ToUpper(strings.TrimSpace(params.SortOrder))
|
||||||
|
if sortOrder == "" {
|
||||||
|
sortOrder = "DESC"
|
||||||
|
}
|
||||||
|
|
||||||
|
switch sortBy {
|
||||||
|
case "po_expedition":
|
||||||
|
return db.Order(`(SELECT MIN(e.reference_number) FROM purchase_items pi
|
||||||
|
LEFT JOIN expense_nonstocks en ON en.id = pi.expense_nonstock_id
|
||||||
|
LEFT JOIN expenses e ON e.id = en.expense_id
|
||||||
|
WHERE pi.purchase_id = purchases.id) ` + sortOrder + " NULLS LAST")
|
||||||
|
case "supplier":
|
||||||
|
return db.Order(`(SELECT COALESCE(s.name, '') FROM suppliers s WHERE s.id = purchases.supplier_id) ` + sortOrder)
|
||||||
|
case "requester_name":
|
||||||
|
return db.Order(`(SELECT COALESCE(u.name, '') FROM users u WHERE u.id = purchases.created_by) ` + sortOrder)
|
||||||
|
case "products":
|
||||||
|
return db.Order(`(SELECT MIN(COALESCE(p.name, '')) FROM purchase_items pi
|
||||||
|
JOIN products p ON p.id = pi.product_id
|
||||||
|
WHERE pi.purchase_id = purchases.id) ` + sortOrder)
|
||||||
|
case "location":
|
||||||
|
return db.Order(`(SELECT MIN(COALESCE(l.name, '')) FROM purchase_items pi
|
||||||
|
JOIN warehouses w ON w.id = pi.warehouse_id
|
||||||
|
JOIN locations l ON l.id = w.location_id
|
||||||
|
WHERE pi.purchase_id = purchases.id) ` + sortOrder)
|
||||||
|
case "po_date":
|
||||||
|
return db.Order("purchases.po_date " + sortOrder)
|
||||||
|
case "received_date":
|
||||||
|
return db.Order(`(SELECT MIN(pi2.received_date) FROM purchase_items pi2 WHERE pi2.purchase_id = purchases.id) ` + sortOrder)
|
||||||
|
case "due_date":
|
||||||
|
return db.Order("purchases.due_date " + sortOrder)
|
||||||
|
case "status":
|
||||||
|
return db.Order(`(SELECT COALESCE(a.step_name, '') FROM approvals a
|
||||||
|
WHERE a.approvable_type = 'purchase' AND a.approvable_id = purchases.id
|
||||||
|
ORDER BY a.action_at DESC, a.id DESC LIMIT 1) ` + sortOrder)
|
||||||
|
case "created_at":
|
||||||
|
return db.Order("purchases.created_at " + sortOrder)
|
||||||
|
default:
|
||||||
|
return db.Order("created_at DESC").Order("purchases.id DESC")
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -81,4 +81,6 @@ type Query struct {
|
|||||||
Search string `query:"search" validate:"omitempty,max=100"`
|
Search string `query:"search" validate:"omitempty,max=100"`
|
||||||
CreatedFrom string `query:"created_from" validate:"omitempty,datetime=2006-01-02"`
|
CreatedFrom string `query:"created_from" validate:"omitempty,datetime=2006-01-02"`
|
||||||
CreatedTo string `query:"created_to" validate:"omitempty,datetime=2006-01-02"`
|
CreatedTo string `query:"created_to" validate:"omitempty,datetime=2006-01-02"`
|
||||||
|
SortBy string `query:"sort_by" validate:"omitempty,oneof=po_expedition supplier requester_name products location po_date received_date due_date status created_at"`
|
||||||
|
SortOrder string `query:"sort_order" validate:"omitempty,oneof=asc desc ASC DESC"`
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user