From 8410573ee6c28b90a3da568be76e0d72dbcb3ae8 Mon Sep 17 00:00:00 2001 From: ragilap Date: Tue, 27 Jan 2026 22:28:14 +0700 Subject: [PATCH] [FIX/BE-US] add transfer to laying filter location and area --- .../laying_transfer.repository.go | 21 +++++++++++++++++++ .../services/transfer_laying.service.go | 12 ++++++----- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/internal/modules/production/transfer_layings/repositories/laying_transfer.repository.go b/internal/modules/production/transfer_layings/repositories/laying_transfer.repository.go index 14fa4118..ebf63252 100644 --- a/internal/modules/production/transfer_layings/repositories/laying_transfer.repository.go +++ b/internal/modules/production/transfer_layings/repositories/laying_transfer.repository.go @@ -52,6 +52,8 @@ type GetAllFilterParams struct { FlockSource []uint FlockDestination []uint Status []string + LocationIDs []uint + LocationRestrict bool } 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 { return nil, 0, err } diff --git a/internal/modules/production/transfer_layings/services/transfer_laying.service.go b/internal/modules/production/transfer_layings/services/transfer_laying.service.go index 60096547..9c586064 100644 --- a/internal/modules/production/transfer_layings/services/transfer_laying.service.go +++ b/internal/modules/production/transfer_layings/services/transfer_laying.service.go @@ -107,6 +107,11 @@ func (s transferLayingService) GetAll(c *fiber.Ctx, params *validation.Query) ([ 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 filterParams := &repository.GetAllFilterParams{ @@ -116,6 +121,8 @@ func (s transferLayingService) GetAll(c *fiber.Ctx, params *validation.Query) ([ FlockSource: params.FlockSource, FlockDestination: params.FlockDestination, Status: params.Status, + LocationIDs: scope.IDs, + LocationRestrict: scope.Restrict, } 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 } - if err != nil { - s.Log.Errorf("Failed to get transferLayings: %+v", err) - return nil, 0, err - } - approvalRepo := commonRepo.NewApprovalRepository(s.Repository.DB()) for i, transfer := range transferLayings { latestApproval, err := approvalRepo.LatestByTarget(c.Context(), string(utils.ApprovalWorkflowTransferToLaying), transfer.Id, func(db *gorm.DB) *gorm.DB {