add adjustment depresiasi calculation and percentage depresiasi

This commit is contained in:
giovanni
2026-05-29 21:48:20 +07:00
parent b4fbef702a
commit a46edc4498
14 changed files with 128 additions and 178 deletions
@@ -41,6 +41,7 @@ type houseMultiplicationPercentageRow struct {
HouseType string
Day int
MultiplicationPercentage float64
EffectiveDate *time.Time
}
type ExpenseDepreciationRepository interface {
@@ -50,7 +51,7 @@ type ExpenseDepreciationRepository interface {
DeleteSnapshotsFromDate(ctx context.Context, fromDate time.Time, farmIDs []uint) error
DeleteSnapshotsByFarmIDs(ctx context.Context, farmIDs []uint) error
GetLatestTransferInputsByFarms(ctx context.Context, period time.Time, farmIDs []uint) ([]FarmDepreciationLatestTransferRow, error)
GetMultiplicationPercentages(ctx context.Context, houseTypes []string, maxDay int) (map[string]map[int]float64, error)
GetMultiplicationPercentages(ctx context.Context, houseTypes []string, maxDay int) (map[string]map[int]float64, map[string]*time.Time, error)
GetLatestManualInputsByFarms(ctx context.Context, areaIDs, locationIDs, projectFlockIDs []int64) ([]FarmDepreciationManualInputRow, error)
UpsertManualInput(ctx context.Context, row *entity.FarmDepreciationManualInput) error
DB() *gorm.DB
@@ -244,21 +245,22 @@ func (r *expenseDepreciationRepository) GetMultiplicationPercentages(
ctx context.Context,
houseTypes []string,
maxDay int,
) (map[string]map[int]float64, error) {
) (map[string]map[int]float64, map[string]*time.Time, error) {
result := make(map[string]map[int]float64)
effectiveDates := make(map[string]*time.Time)
if len(houseTypes) == 0 || maxDay <= 0 {
return result, nil
return result, effectiveDates, nil
}
rows := make([]houseMultiplicationPercentageRow, 0)
if err := r.db.WithContext(ctx).Raw(`
SELECT DISTINCT ON (house_type::text, day)
house_type::text AS house_type, day, multiplication_percentage
house_type::text AS house_type, day, multiplication_percentage, effective_date
FROM house_depreciation_standards
WHERE house_type::text IN ? AND day <= ?
ORDER BY house_type, day, effective_date DESC NULLS LAST
`, houseTypes, maxDay).Scan(&rows).Error; err != nil {
return nil, err
return nil, nil, err
}
for _, row := range rows {
@@ -266,9 +268,12 @@ func (r *expenseDepreciationRepository) GetMultiplicationPercentages(
result[row.HouseType] = make(map[int]float64)
}
result[row.HouseType][row.Day] = row.MultiplicationPercentage
if _, tracked := effectiveDates[row.HouseType]; !tracked {
effectiveDates[row.HouseType] = row.EffectiveDate
}
}
return result, nil
return result, effectiveDates, nil
}
func (r *expenseDepreciationRepository) GetLatestManualInputsByFarms(