mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-23 14:55:42 +00:00
fix(BE): multiple filter, all search
This commit is contained in:
@@ -74,33 +74,58 @@ func (s transactionService) GetAll(c *fiber.Ctx, params *validation.Query) ([]en
|
||||
|
||||
if params.Search != "" {
|
||||
like := "%" + strings.ToLower(strings.TrimSpace(params.Search)) + "%"
|
||||
db = db.Joins(
|
||||
"LEFT JOIN customers ON customers.id = payments.party_id AND payments.party_type = ? AND customers.deleted_at IS NULL",
|
||||
string(utils.PaymentPartyCustomer),
|
||||
).Joins(
|
||||
"LEFT JOIN suppliers ON suppliers.id = payments.party_id AND payments.party_type = ? AND suppliers.deleted_at IS NULL",
|
||||
string(utils.PaymentPartySupplier),
|
||||
).Joins(
|
||||
"LEFT JOIN banks ON banks.id = payments.bank_id AND banks.deleted_at IS NULL",
|
||||
)
|
||||
db = db.Where(
|
||||
`LOWER(payment_code) LIKE ? OR
|
||||
LOWER(COALESCE(reference_number, '')) LIKE ? OR
|
||||
LOWER(COALESCE(transaction_type, '')) LIKE ? OR
|
||||
LOWER(COALESCE(notes, '')) LIKE ?`,
|
||||
like, like, like, like,
|
||||
LOWER(COALESCE(notes, '')) LIKE ? OR
|
||||
LOWER(COALESCE(customers.name, '')) LIKE ? OR
|
||||
LOWER(COALESCE(suppliers.name, '')) LIKE ? OR
|
||||
LOWER(COALESCE(banks.name, '')) LIKE ?`,
|
||||
like, like, like, like, like, like, like,
|
||||
)
|
||||
}
|
||||
|
||||
if strings.TrimSpace(params.TransactionType) != "" {
|
||||
db = db.Where("transaction_type = ?", strings.ToUpper(strings.TrimSpace(params.TransactionType)))
|
||||
if len(params.TransactionTypes) > 0 {
|
||||
types := make([]string, 0, len(params.TransactionTypes))
|
||||
for _, transactionType := range params.TransactionTypes {
|
||||
normalized := strings.ToUpper(strings.TrimSpace(transactionType))
|
||||
if normalized == "" {
|
||||
continue
|
||||
}
|
||||
types = append(types, normalized)
|
||||
}
|
||||
if len(types) > 0 {
|
||||
db = db.Where("transaction_type IN ?", types)
|
||||
}
|
||||
}
|
||||
|
||||
if params.BankId != nil {
|
||||
db = db.Where("bank_id = ?", *params.BankId)
|
||||
if len(params.BankIDs) > 0 {
|
||||
db = db.Where("bank_id IN ?", params.BankIDs)
|
||||
}
|
||||
|
||||
if params.CustomerId != nil && params.SupplierId != nil {
|
||||
customerIDs := params.CustomerIDs
|
||||
supplierIDs := params.SupplierIDs
|
||||
|
||||
if len(customerIDs) > 0 && len(supplierIDs) > 0 {
|
||||
db = db.Where(
|
||||
"(party_type = ? AND party_id = ?) OR (party_type = ? AND party_id = ?)",
|
||||
string(utils.PaymentPartyCustomer), *params.CustomerId,
|
||||
string(utils.PaymentPartySupplier), *params.SupplierId,
|
||||
"(party_type = ? AND party_id IN ?) OR (party_type = ? AND party_id IN ?)",
|
||||
string(utils.PaymentPartyCustomer), customerIDs,
|
||||
string(utils.PaymentPartySupplier), supplierIDs,
|
||||
)
|
||||
} 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)
|
||||
} else if len(customerIDs) > 0 {
|
||||
db = db.Where("party_type = ? AND party_id IN ?", string(utils.PaymentPartyCustomer), customerIDs)
|
||||
} else if len(supplierIDs) > 0 {
|
||||
db = db.Where("party_type = ? AND party_id IN ?", string(utils.PaymentPartySupplier), supplierIDs)
|
||||
}
|
||||
|
||||
if startDate != nil {
|
||||
|
||||
Reference in New Issue
Block a user