codex/fix: uniformity week calculation

This commit is contained in:
Adnan Zahir
2026-04-14 13:09:47 +07:00
parent 7638c183f5
commit ca698ff2ae
6 changed files with 236 additions and 76 deletions
@@ -939,12 +939,27 @@ func (s *repportService) getUniformityByWeek(ctx context.Context, projectFlockKa
return result, nil
}
weekExpr := fmt.Sprintf(`CASE
WHEN u.uniform_date IS NULL OR pc.chick_in_date IS NULL THEN 0
WHEN u.uniform_date::date < pc.chick_in_date THEN 0
WHEN UPPER(pf.category) = 'LAYING' THEN (((u.uniform_date::date - pc.chick_in_date)::int) / 7) + %d
ELSE (((u.uniform_date::date - pc.chick_in_date)::int) / 7) + 1
END`, config.LayingWeekStart())
var rows []entity.ProjectFlockKandangUniformity
if err := s.db.WithContext(ctx).
Model(&entity.ProjectFlockKandangUniformity{}).
Select("week, uniformity, uniform_date, id, chart_data").
Where("project_flock_kandang_id = ?", projectFlockKandangID).
Where("week IN ?", weeks).
Table("project_flock_kandang_uniformity AS u").
Select(fmt.Sprintf("%s AS week, u.uniformity, u.uniform_date, u.id, u.chart_data", weekExpr)).
Joins("JOIN project_flock_kandangs AS pfk ON pfk.id = u.project_flock_kandang_id").
Joins("JOIN project_flocks AS pf ON pf.id = pfk.project_flock_id").
Joins(`JOIN (
SELECT project_flock_kandang_id, MIN(chick_in_date)::date AS chick_in_date
FROM project_chickins
WHERE deleted_at IS NULL
GROUP BY project_flock_kandang_id
) AS pc ON pc.project_flock_kandang_id = u.project_flock_kandang_id`).
Where("u.project_flock_kandang_id = ?", projectFlockKandangID).
Where(fmt.Sprintf("%s IN ?", weekExpr), weeks).
Order("uniform_date DESC").
Order("id DESC").
Find(&rows).Error; err != nil {