[FIX/BE-US] add transfer to laying filter location and area

This commit is contained in:
ragilap
2026-01-27 22:28:14 +07:00
parent 8848a50e3b
commit 8410573ee6
2 changed files with 28 additions and 5 deletions
@@ -52,6 +52,8 @@ type GetAllFilterParams struct {
FlockSource []uint FlockSource []uint
FlockDestination []uint FlockDestination []uint
Status []string Status []string
LocationIDs []uint
LocationRestrict bool
} }
func (r *TransferLayingRepositoryImpl) GetAllWithFilters(ctx context.Context, offset int, limit int, params *GetAllFilterParams) ([]entity.LayingTransfer, int64, error) { func (r *TransferLayingRepositoryImpl) GetAllWithFilters(ctx context.Context, offset int, limit int, params *GetAllFilterParams) ([]entity.LayingTransfer, int64, error) {
@@ -110,6 +112,25 @@ func (r *TransferLayingRepositoryImpl) GetAllWithFilters(ctx context.Context, of
} }
} }
if params.LocationRestrict {
if len(params.LocationIDs) == 0 {
q = q.Where("1 = 0")
} else {
q = q.Where(
`EXISTS (
SELECT 1 FROM project_flocks pf
WHERE pf.id = laying_transfers.from_project_flock_id
AND pf.location_id IN ?
) OR EXISTS (
SELECT 1 FROM project_flocks pf
WHERE pf.id = laying_transfers.to_project_flock_id
AND pf.location_id IN ?
)`,
params.LocationIDs, params.LocationIDs,
)
}
}
if err := q.Count(&total).Error; err != nil { if err := q.Count(&total).Error; err != nil {
return nil, 0, err return nil, 0, err
} }
@@ -107,6 +107,11 @@ func (s transferLayingService) GetAll(c *fiber.Ctx, params *validation.Query) ([
return nil, 0, err return nil, 0, err
} }
scope, err := m.ResolveLocationScope(c, s.Repository.DB())
if err != nil {
return nil, 0, err
}
offset := (params.Page - 1) * params.Limit offset := (params.Page - 1) * params.Limit
filterParams := &repository.GetAllFilterParams{ filterParams := &repository.GetAllFilterParams{
@@ -116,6 +121,8 @@ func (s transferLayingService) GetAll(c *fiber.Ctx, params *validation.Query) ([
FlockSource: params.FlockSource, FlockSource: params.FlockSource,
FlockDestination: params.FlockDestination, FlockDestination: params.FlockDestination,
Status: params.Status, Status: params.Status,
LocationIDs: scope.IDs,
LocationRestrict: scope.Restrict,
} }
transferLayings, total, err := s.Repository.GetAllWithFilters(c.Context(), offset, params.Limit, filterParams) transferLayings, total, err := s.Repository.GetAllWithFilters(c.Context(), offset, params.Limit, filterParams)
@@ -124,11 +131,6 @@ func (s transferLayingService) GetAll(c *fiber.Ctx, params *validation.Query) ([
return nil, 0, err return nil, 0, err
} }
if err != nil {
s.Log.Errorf("Failed to get transferLayings: %+v", err)
return nil, 0, err
}
approvalRepo := commonRepo.NewApprovalRepository(s.Repository.DB()) approvalRepo := commonRepo.NewApprovalRepository(s.Repository.DB())
for i, transfer := range transferLayings { for i, transfer := range transferLayings {
latestApproval, err := approvalRepo.LatestByTarget(c.Context(), string(utils.ApprovalWorkflowTransferToLaying), transfer.Id, func(db *gorm.DB) *gorm.DB { latestApproval, err := approvalRepo.LatestByTarget(c.Context(), string(utils.ApprovalWorkflowTransferToLaying), transfer.Id, func(db *gorm.DB) *gorm.DB {