mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-24 07:15:43 +00:00
feat[BE]: Add GetClosingKeuanganByKandang endpoint and related service methods
This commit is contained in:
@@ -17,6 +17,12 @@ type ClosingKeuanganRepository interface {
|
||||
// All Product Usage
|
||||
GetAllProductUsageByProjectFlockKandangID(ctx context.Context, projectFlockKandangID uint, flagFilters []string) ([]ProductUsageRow, error)
|
||||
|
||||
// Depletion per kandang
|
||||
GetTotalDepletionByProjectFlockKandangID(ctx context.Context, projectFlockKandangID uint) (float64, error)
|
||||
|
||||
// Weight produced from uniformity per kandang
|
||||
GetTotalWeightProducedFromUniformityByProjectFlockKandangID(ctx context.Context, projectFlockKandangID uint) (float64, error)
|
||||
|
||||
// DB returns the underlying GORM DB instance
|
||||
DB() *gorm.DB
|
||||
}
|
||||
@@ -310,6 +316,49 @@ func (r *ClosingKeuanganRepositoryImpl) GetAllProductUsageByProjectFlockKandangI
|
||||
return results, nil
|
||||
}
|
||||
|
||||
// GetTotalDepletionByProjectFlockKandangID gets total depletion for a specific kandang
|
||||
func (r *ClosingKeuanganRepositoryImpl) GetTotalDepletionByProjectFlockKandangID(ctx context.Context, projectFlockKandangID uint) (float64, error) {
|
||||
var result float64
|
||||
err := r.DB().WithContext(ctx).
|
||||
Table("recording_depletions").
|
||||
Select("COALESCE(SUM(recording_depletions.qty), 0)").
|
||||
Joins("JOIN recordings ON recordings.id = recording_depletions.recording_id").
|
||||
Joins("JOIN project_flock_kandangs ON project_flock_kandangs.id = recordings.project_flock_kandangs_id").
|
||||
Where("project_flock_kandangs.id = ?", projectFlockKandangID).
|
||||
Scan(&result).Error
|
||||
return result, err
|
||||
}
|
||||
|
||||
// GetTotalWeightProducedFromUniformityByProjectFlockKandangID calculates total weight produced from uniformity data for a specific kandang
|
||||
// Formula: (mean_up / 1.10) * chick_qty_of_weight / 1000
|
||||
func (r *ClosingKeuanganRepositoryImpl) GetTotalWeightProducedFromUniformityByProjectFlockKandangID(ctx context.Context, projectFlockKandangID uint) (float64, error) {
|
||||
if projectFlockKandangID == 0 {
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
var uniformity struct {
|
||||
MeanUp float64
|
||||
ChickQtyOfWeight float64
|
||||
}
|
||||
|
||||
err := r.DB().WithContext(ctx).
|
||||
Table("project_flock_kandang_uniformity").
|
||||
Select("mean_up, chick_qty_of_weight").
|
||||
Where("project_flock_kandang_id = ?", projectFlockKandangID).
|
||||
Order("id DESC").
|
||||
Limit(1).
|
||||
Scan(&uniformity).Error
|
||||
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
// Calculate weight: (mean_up / 1.10) * chick_qty_of_weight / 1000
|
||||
totalWeight := (uniformity.MeanUp / 1.10) * uniformity.ChickQtyOfWeight / 1000
|
||||
|
||||
return totalWeight, nil
|
||||
}
|
||||
|
||||
// containsIgnoreCase checks if a string contains a substring (case-insensitive)
|
||||
func containsIgnoreCase(str, substr string) bool {
|
||||
return strings.Contains(strings.ToUpper(str), strings.ToUpper(substr))
|
||||
|
||||
Reference in New Issue
Block a user