mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-23 14:55:42 +00:00
fix(BE): edit customer, finance: bank optional, nominal minus, and filter
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"errors"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
commonSvc "gitlab.com/mbugroup/lti-api.git/internal/common/service"
|
||||
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
|
||||
@@ -61,13 +62,19 @@ func (s transactionService) GetAll(c *fiber.Ctx, params *validation.Query) ([]en
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
startDate, endDate, err := parseTransactionDateRange(params.StartDate, params.EndDate)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
offset := (params.Page - 1) * params.Limit
|
||||
|
||||
transactions, total, err := s.Repository.GetAll(c.Context(), offset, params.Limit, func(db *gorm.DB) *gorm.DB {
|
||||
db = s.withRelations(db)
|
||||
|
||||
if params.Search != "" {
|
||||
like := "%" + strings.ToLower(strings.TrimSpace(params.Search)) + "%"
|
||||
return db.Where(
|
||||
db = db.Where(
|
||||
`LOWER(payment_code) LIKE ? OR
|
||||
LOWER(COALESCE(reference_number, '')) LIKE ? OR
|
||||
LOWER(COALESCE(transaction_type, '')) LIKE ? OR
|
||||
@@ -75,7 +82,35 @@ func (s transactionService) GetAll(c *fiber.Ctx, params *validation.Query) ([]en
|
||||
like, like, like, like,
|
||||
)
|
||||
}
|
||||
return db.Order("payment_date DESC").Order("created_at DESC")
|
||||
|
||||
if strings.TrimSpace(params.TransactionType) != "" {
|
||||
db = db.Where("transaction_type = ?", strings.ToUpper(strings.TrimSpace(params.TransactionType)))
|
||||
}
|
||||
|
||||
if params.BankId != nil {
|
||||
db = db.Where("bank_id = ?", *params.BankId)
|
||||
}
|
||||
|
||||
if params.CustomerId != nil && params.SupplierId != nil {
|
||||
db = db.Where(
|
||||
"(party_type = ? AND party_id = ?) OR (party_type = ? AND party_id = ?)",
|
||||
string(utils.PaymentPartyCustomer), *params.CustomerId,
|
||||
string(utils.PaymentPartySupplier), *params.SupplierId,
|
||||
)
|
||||
} else if params.CustomerId != nil {
|
||||
db = db.Where("party_type = ? AND party_id = ?", string(utils.PaymentPartyCustomer), *params.CustomerId)
|
||||
} else if params.SupplierId != nil {
|
||||
db = db.Where("party_type = ? AND party_id = ?", string(utils.PaymentPartySupplier), *params.SupplierId)
|
||||
}
|
||||
|
||||
if startDate != nil {
|
||||
db = db.Where("payment_date >= ?", *startDate)
|
||||
}
|
||||
if endDate != nil {
|
||||
db = db.Where("payment_date < ?", *endDate)
|
||||
}
|
||||
|
||||
return applyTransactionSort(db, params.SortDate)
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
@@ -173,3 +208,47 @@ func (s transactionService) approvalQueryModifier() func(*gorm.DB) *gorm.DB {
|
||||
return db.Preload("ActionUser")
|
||||
}
|
||||
}
|
||||
|
||||
func parseTransactionDateRange(startDate, endDate string) (*time.Time, *time.Time, error) {
|
||||
start := strings.TrimSpace(startDate)
|
||||
end := strings.TrimSpace(endDate)
|
||||
|
||||
var startPtr *time.Time
|
||||
var endPtr *time.Time
|
||||
var endValue *time.Time
|
||||
|
||||
if start != "" {
|
||||
parsed, err := utils.ParseDateString(start)
|
||||
if err != nil {
|
||||
return nil, nil, utils.BadRequest("start_date must use format YYYY-MM-DD")
|
||||
}
|
||||
startPtr = &parsed
|
||||
}
|
||||
|
||||
if end != "" {
|
||||
parsed, err := utils.ParseDateString(end)
|
||||
if err != nil {
|
||||
return nil, nil, utils.BadRequest("end_date must use format YYYY-MM-DD")
|
||||
}
|
||||
endValue = &parsed
|
||||
nextDay := parsed.AddDate(0, 0, 1)
|
||||
endPtr = &nextDay
|
||||
}
|
||||
|
||||
if startPtr != nil && endValue != nil && startPtr.After(*endValue) {
|
||||
return nil, nil, utils.BadRequest("start_date must be earlier than end_date")
|
||||
}
|
||||
|
||||
return startPtr, endPtr, nil
|
||||
}
|
||||
|
||||
func applyTransactionSort(db *gorm.DB, sortDate string) *gorm.DB {
|
||||
switch strings.ToLower(strings.TrimSpace(sortDate)) {
|
||||
case "created_at":
|
||||
return db.Order("created_at DESC").Order("payment_date DESC")
|
||||
case "payment_date":
|
||||
return db.Order("payment_date DESC").Order("created_at DESC")
|
||||
default:
|
||||
return db.Order("payment_date DESC").Order("created_at DESC")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user