diff --git a/internal/common/repository/common.hpp.repository.go b/internal/common/repository/common.hpp.repository.go index 37094c16..c005e24e 100644 --- a/internal/common/repository/common.hpp.repository.go +++ b/internal/common/repository/common.hpp.repository.go @@ -219,25 +219,53 @@ func (r *HppRepositoryImpl) GetEggProduksiPiecesAndWeightKgByProjectFlockKandang return totals.TotalPieces, totals.TotalWeightKg, nil } -func (r *HppRepositoryImpl) GetEggTerjualPiecesAndWeightKgByProjectFlockKandangIds(ctx context.Context, projectFlockKandangIDs []uint, date *time.Time) (float64, float64, error) { +func (r *HppRepositoryImpl) GetEggTerjualPiecesAndWeightKgByProjectFlockKandangIds( + ctx context.Context, + projectFlockKandangIDs []uint, + date *time.Time, +) (float64, float64, error) { + if date == nil { now := time.Now() date = &now } + type subResult struct { + UsableID uint + MdpUsageQty float64 + MdpWeight float64 + } + + subQuery := r.db.WithContext(ctx). + Table("recordings AS r"). + Select(` + DISTINCT sa.usable_id, + mdp.usage_qty AS mdp_usage_qty, + mdp.total_weight AS mdp_weight + `). + Joins("JOIN recording_eggs re ON re.recording_id = r.id"). + Joins( + "JOIN stock_allocations sa ON sa.stockable_type = ? AND sa.stockable_id = re.id AND sa.usable_type = ?", + fifo.StockableKeyRecordingEgg.String(), + fifo.UsableKeyMarketingDelivery.String(), + ). + Joins("JOIN marketing_delivery_products mdp ON mdp.id = sa.usable_id"). + Where("r.project_flock_kandangs_id IN (?)", projectFlockKandangIDs). + Where("r.record_datetime <= ?", *date) + var totals struct { TotalPieces float64 TotalWeight float64 } + err := r.db.WithContext(ctx). - Table("recordings AS r"). - Select("COALESCE(SUM(mdp.usage_qty), 0) AS total_pieces, COALESCE(SUM(mdp.total_weight), 0) AS total_weight"). - Joins("JOIN recording_eggs AS re ON re.recording_id = r.id"). - Joins("JOIN stock_allocations AS sa ON sa.stockable_type = ? AND sa.stockable_id = re.id AND sa.usable_type = ?", fifo.StockableKeyRecordingEgg.String(), fifo.UsableKeyMarketingDelivery.String()). - Joins("JOIN marketing_delivery_products AS mdp ON mdp.id = sa.usable_id"). - Where("r.project_flock_kandangs_id IN (?)", projectFlockKandangIDs). - Where("r.record_datetime <= ?", *date). + Table("(?) AS x", subQuery). + Select(` + COALESCE(SUM(x.mdp_usage_qty), 0) AS total_pieces, + COALESCE(SUM(x.mdp_weight), 0) AS total_weight + `). Scan(&totals).Error + if err != nil { return 0, 0, err }