mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-22 14:25:45 +00:00
adjust export format purchase and filter
This commit is contained in:
@@ -145,33 +145,16 @@ func (s *purchaseService) GetAll(c *fiber.Ctx, params *validation.Query) ([]enti
|
||||
|
||||
offset := (params.Page - 1) * params.Limit
|
||||
|
||||
createdFrom, createdTo, err := utils.ParseDateRangeForQuery(params.CreatedFrom, params.CreatedTo)
|
||||
if err != nil {
|
||||
return nil, 0, utils.BadRequest(err.Error())
|
||||
}
|
||||
|
||||
productCategoryIDs, err := parseUintCSVFilter(params.ProductCategoryID, "product_category_id")
|
||||
if err != nil {
|
||||
return nil, 0, utils.BadRequest(err.Error())
|
||||
}
|
||||
|
||||
var poDateStart *time.Time
|
||||
var poDateEnd *time.Time
|
||||
|
||||
if strings.TrimSpace(params.PoDate) != "" {
|
||||
poDate, parseErr := utils.ParseDateString(strings.TrimSpace(params.PoDate))
|
||||
if parseErr != nil {
|
||||
return nil, 0, utils.BadRequest("po_date must use format YYYY-MM-DD")
|
||||
}
|
||||
poDateStart = &poDate
|
||||
poDateEndValue := poDate.AddDate(0, 0, 1)
|
||||
poDateEnd = &poDateEndValue
|
||||
} else {
|
||||
poDateStart, poDateEnd, err = parsePoDateRangeForQuery(params.PoDateFrom, params.PoDateTo)
|
||||
if err != nil {
|
||||
return nil, 0, utils.BadRequest(err.Error())
|
||||
}
|
||||
dateStart, dateEnd, err := parsePurchaseDateRangeForQuery(params.StartDate, params.EndDate, "date")
|
||||
if err != nil {
|
||||
return nil, 0, utils.BadRequest(err.Error())
|
||||
}
|
||||
filterBy := strings.TrimSpace(params.FilterBy)
|
||||
|
||||
search := strings.ToLower(strings.TrimSpace(params.Search))
|
||||
approvalStatuses := parseStringCSVFilter(params.ApprovalStatus)
|
||||
@@ -187,23 +170,41 @@ func (s *purchaseService) GetAll(c *fiber.Ctx, params *validation.Query) ([]enti
|
||||
db = db.Where("supplier_id = ?", params.SupplierID)
|
||||
}
|
||||
|
||||
if createdFrom != nil {
|
||||
db = db.Where("created_at >= ?", *createdFrom)
|
||||
}
|
||||
|
||||
if createdTo != nil {
|
||||
db = db.Where("created_at < ?", *createdTo)
|
||||
}
|
||||
if poDateStart != nil {
|
||||
db = db.Where("purchases.po_date >= ?", *poDateStart)
|
||||
}
|
||||
|
||||
if poDateStart != nil {
|
||||
db = db.Where("purchases.po_date >= ?", *poDateStart)
|
||||
}
|
||||
|
||||
if poDateEnd != nil {
|
||||
db = db.Where("purchases.po_date < ?", *poDateEnd)
|
||||
switch filterBy {
|
||||
case "po_date":
|
||||
if dateStart != nil {
|
||||
db = db.Where("purchases.po_date >= ?", *dateStart)
|
||||
}
|
||||
if dateEnd != nil {
|
||||
db = db.Where("purchases.po_date < ?", *dateEnd)
|
||||
}
|
||||
case "due_date":
|
||||
if dateStart != nil {
|
||||
db = db.Where("purchases.due_date >= ?", *dateStart)
|
||||
}
|
||||
if dateEnd != nil {
|
||||
db = db.Where("purchases.due_date < ?", *dateEnd)
|
||||
}
|
||||
case "received_date":
|
||||
if dateStart != nil {
|
||||
db = db.Where(
|
||||
`EXISTS (SELECT 1 FROM purchase_items pi WHERE pi.purchase_id = purchases.id AND pi.received_date >= ?)`,
|
||||
*dateStart,
|
||||
)
|
||||
}
|
||||
if dateEnd != nil {
|
||||
db = db.Where(
|
||||
`EXISTS (SELECT 1 FROM purchase_items pi WHERE pi.purchase_id = purchases.id AND pi.received_date < ?)`,
|
||||
*dateEnd,
|
||||
)
|
||||
}
|
||||
default:
|
||||
if dateStart != nil {
|
||||
db = db.Where("purchases.created_at >= ?", *dateStart)
|
||||
}
|
||||
if dateEnd != nil {
|
||||
db = db.Where("purchases.created_at < ?", *dateEnd)
|
||||
}
|
||||
}
|
||||
|
||||
if scope.Restrict {
|
||||
@@ -2238,30 +2239,29 @@ func (s *purchaseService) attachLatestApprovals(ctx context.Context, items []ent
|
||||
return nil
|
||||
}
|
||||
|
||||
func parsePoDateRangeForQuery(fromStr, toStr string) (*time.Time, *time.Time, error) {
|
||||
func parsePurchaseDateRangeForQuery(fromStr, toStr, fieldName string) (*time.Time, *time.Time, error) {
|
||||
var fromPtr *time.Time
|
||||
var toPtr *time.Time
|
||||
|
||||
if strings.TrimSpace(fromStr) != "" {
|
||||
parsed, err := utils.ParseDateString(strings.TrimSpace(fromStr))
|
||||
if err != nil {
|
||||
return nil, nil, errors.New("po_date_from must use format YYYY-MM-DD")
|
||||
return nil, nil, errors.New(fieldName + "_from must use format YYYY-MM-DD")
|
||||
}
|
||||
fromValue := parsed
|
||||
fromPtr = &fromValue
|
||||
fromPtr = &parsed
|
||||
}
|
||||
|
||||
if strings.TrimSpace(toStr) != "" {
|
||||
parsed, err := utils.ParseDateString(strings.TrimSpace(toStr))
|
||||
if err != nil {
|
||||
return nil, nil, errors.New("po_date_to must use format YYYY-MM-DD")
|
||||
return nil, nil, errors.New(fieldName + "_to must use format YYYY-MM-DD")
|
||||
}
|
||||
nextDay := parsed.AddDate(0, 0, 1)
|
||||
toPtr = &nextDay
|
||||
}
|
||||
|
||||
if fromPtr != nil && toPtr != nil && fromPtr.After(*toPtr) {
|
||||
return nil, nil, errors.New("po_date_from must be earlier than po_date_to")
|
||||
return nil, nil, errors.New(fieldName + "_from must be earlier than " + fieldName + "_to")
|
||||
}
|
||||
|
||||
return fromPtr, toPtr, nil
|
||||
|
||||
Reference in New Issue
Block a user