mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 13:31:56 +00:00
adjust api hpp per kandang and implement common service hpp
This commit is contained in:
@@ -66,9 +66,9 @@ func (r *HppRepositoryImpl) GetDocCost(ctx context.Context, projectFlockKandangI
|
|||||||
func (r *HppRepositoryImpl) GetBudgetCostByProjectFlockId(ctx context.Context, projectFlockId uint) (float64, error) {
|
func (r *HppRepositoryImpl) GetBudgetCostByProjectFlockId(ctx context.Context, projectFlockId uint) (float64, error) {
|
||||||
var total float64
|
var total float64
|
||||||
err := r.db.WithContext(ctx).
|
err := r.db.WithContext(ctx).
|
||||||
Table("project_chickin_details AS pcd").
|
Table("project_budgets AS pb").
|
||||||
Select("COALESCE(SUM(pcd.qty * pcd.price), 0)").
|
Select("COALESCE(SUM(pb.qty * pb.price), 0)").
|
||||||
Where("pcd.project_flock_id = ?", projectFlockId).
|
Where("pb.project_flock_id = ?", projectFlockId).
|
||||||
Scan(&total).Error
|
Scan(&total).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
@@ -269,6 +269,7 @@ func (r *HppRepositoryImpl) GetTransferSourceSummary(ctx context.Context, projec
|
|||||||
Select("lt.from_project_flock_id AS project_flock_id, COALESCE(SUM(ltt.total_qty), 0) AS total_qty").
|
Select("lt.from_project_flock_id AS project_flock_id, COALESCE(SUM(ltt.total_qty), 0) AS total_qty").
|
||||||
Joins("JOIN laying_transfers AS lt ON lt.id = ltt.laying_transfer_id").
|
Joins("JOIN laying_transfers AS lt ON lt.id = ltt.laying_transfer_id").
|
||||||
Where("ltt.target_project_flock_kandang_id = ?", projectFlockKandangId).
|
Where("ltt.target_project_flock_kandang_id = ?", projectFlockKandangId).
|
||||||
|
Group("lt.from_project_flock_id").
|
||||||
Scan(&summary).Error
|
Scan(&summary).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, 0, err
|
return 0, 0, err
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ func (RepportModule) RegisterRoutes(router fiber.Router, db *gorm.DB, validate *
|
|||||||
chickinRepository := chickinRepo.NewChickinRepository(db)
|
chickinRepository := chickinRepo.NewChickinRepository(db)
|
||||||
recordingRepository := recordingRepo.NewRecordingRepository(db)
|
recordingRepository := recordingRepo.NewRecordingRepository(db)
|
||||||
approvalRepository := commonRepo.NewApprovalRepository(db)
|
approvalRepository := commonRepo.NewApprovalRepository(db)
|
||||||
|
hppCostRepository := commonRepo.NewHppCostRepository(db)
|
||||||
purchaseSupplierRepository := repportRepo.NewPurchaseSupplierRepository(db)
|
purchaseSupplierRepository := repportRepo.NewPurchaseSupplierRepository(db)
|
||||||
debtSupplierRepository := repportRepo.NewDebtSupplierRepository(db)
|
debtSupplierRepository := repportRepo.NewDebtSupplierRepository(db)
|
||||||
hppPerKandangRepository := repportRepo.NewHppPerKandangRepository(db)
|
hppPerKandangRepository := repportRepo.NewHppPerKandangRepository(db)
|
||||||
@@ -43,7 +44,8 @@ func (RepportModule) RegisterRoutes(router fiber.Router, db *gorm.DB, validate *
|
|||||||
userRepository := rUser.NewUserRepository(db)
|
userRepository := rUser.NewUserRepository(db)
|
||||||
|
|
||||||
approvalSvc := approvalService.NewApprovalService(approvalRepository)
|
approvalSvc := approvalService.NewApprovalService(approvalRepository)
|
||||||
repportService := sRepport.NewRepportService(db, validate, expenseRealizationRepository, marketingDeliveryProductRepository, purchaseRepository, chickinRepository, recordingRepository, approvalSvc, purchaseSupplierRepository, debtSupplierRepository, hppPerKandangRepository, productionResultRepository, customerPaymentRepository, customerRepository, standardGrowthDetailRepository, productionStandardDetailRepository)
|
hppSvc := approvalService.NewHppService(hppCostRepository)
|
||||||
|
repportService := sRepport.NewRepportService(db, validate, expenseRealizationRepository, marketingDeliveryProductRepository, purchaseRepository, chickinRepository, recordingRepository, approvalSvc, hppSvc, purchaseSupplierRepository, debtSupplierRepository, hppPerKandangRepository, productionResultRepository, customerPaymentRepository, customerRepository, standardGrowthDetailRepository, productionStandardDetailRepository)
|
||||||
userService := sUser.NewUserService(userRepository, validate)
|
userService := sUser.NewUserService(userRepository, validate)
|
||||||
|
|
||||||
RepportRoutes(router, userService, repportService)
|
RepportRoutes(router, userService, repportService)
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import (
|
|||||||
|
|
||||||
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
|
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
|
||||||
"gitlab.com/mbugroup/lti-api.git/internal/utils"
|
"gitlab.com/mbugroup/lti-api.git/internal/utils"
|
||||||
"gitlab.com/mbugroup/lti-api.git/internal/utils/fifo"
|
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -133,60 +132,6 @@ func (r *hppPerKandangRepository) GetRowsByPeriod(ctx context.Context, start, en
|
|||||||
func (r *hppPerKandangRepository) GetFeedOvkDocCostByPeriod(ctx context.Context, start, end time.Time, projectFlockKandangIDs []uint) ([]HppPerKandangCostRow, []HppPerKandangSupplierRow, error) {
|
func (r *hppPerKandangRepository) GetFeedOvkDocCostByPeriod(ctx context.Context, start, end time.Time, projectFlockKandangIDs []uint) ([]HppPerKandangCostRow, []HppPerKandangSupplierRow, error) {
|
||||||
var rows []HppPerKandangCostRow
|
var rows []HppPerKandangCostRow
|
||||||
|
|
||||||
purchaseStockableKey := fifo.StockableKeyPurchaseItems.String()
|
|
||||||
transferStockableKey := fifo.StockableKeyStockTransferIn.String()
|
|
||||||
|
|
||||||
latestApproval := r.db.WithContext(ctx).
|
|
||||||
Table("approvals AS a").
|
|
||||||
Select("a.approvable_id, a.action").
|
|
||||||
Joins(`
|
|
||||||
JOIN (
|
|
||||||
SELECT approvable_id, MAX(action_at) AS latest_action_at
|
|
||||||
FROM approvals
|
|
||||||
WHERE approvable_type = ?
|
|
||||||
GROUP BY approvable_id
|
|
||||||
) AS la ON la.approvable_id = a.approvable_id AND la.latest_action_at = a.action_at`,
|
|
||||||
string(utils.ApprovalWorkflowRecording),
|
|
||||||
)
|
|
||||||
|
|
||||||
query := r.db.WithContext(ctx).
|
|
||||||
Table("recordings AS r").
|
|
||||||
Select(`
|
|
||||||
pfk.id AS project_flock_kandang_id,
|
|
||||||
COALESCE(SUM(CASE
|
|
||||||
WHEN f.name = ? THEN COALESCE(sa.qty, 0) * COALESCE(pi.price, 0)
|
|
||||||
WHEN sa.stockable_type = ? AND tf.name = ? THEN COALESCE(std.total_qty, 0) * COALESCE(tpi.price, 0)
|
|
||||||
ELSE 0
|
|
||||||
END), 0) AS feed_cost,
|
|
||||||
COALESCE(SUM(CASE
|
|
||||||
WHEN f.name = ? THEN COALESCE(sa.qty, 0) * COALESCE(pi.price, 0)
|
|
||||||
WHEN sa.stockable_type = ? AND tf.name = ? THEN COALESCE(std.total_qty, 0) * COALESCE(tpi.price, 0)
|
|
||||||
ELSE 0
|
|
||||||
END), 0) AS ovk_cost`,
|
|
||||||
utils.FlagPakan, transferStockableKey, utils.FlagPakan,
|
|
||||||
utils.FlagOVK, transferStockableKey, utils.FlagOVK).
|
|
||||||
Joins("JOIN project_flock_kandangs AS pfk ON pfk.id = r.project_flock_kandangs_id").
|
|
||||||
Joins("JOIN kandangs AS k ON k.id = pfk.kandang_id").
|
|
||||||
Joins("LEFT JOIN (?) AS la ON la.approvable_id = r.id", latestApproval).
|
|
||||||
Joins("LEFT JOIN recording_stocks AS rs ON rs.recording_id = r.id").
|
|
||||||
Joins("LEFT JOIN stock_allocations AS sa ON sa.usable_type = ? AND sa.usable_id = rs.id AND sa.status = ?", fifo.UsableKeyRecordingStock.String(), entity.StockAllocationStatusActive).
|
|
||||||
Joins("LEFT JOIN purchase_items AS pi ON pi.id = sa.stockable_id AND sa.stockable_type = ?", purchaseStockableKey).
|
|
||||||
Joins("LEFT JOIN stock_transfer_details AS std ON std.id = sa.stockable_id AND sa.stockable_type = ?", transferStockableKey).
|
|
||||||
Joins("LEFT JOIN stock_transfers AS st ON st.id = std.stock_transfer_id").
|
|
||||||
Joins("LEFT JOIN purchase_items AS tpi ON tpi.product_id = std.product_id AND tpi.warehouse_id = st.from_warehouse_id").
|
|
||||||
Joins("LEFT JOIN flags AS f ON f.flagable_id = pi.product_id AND f.flagable_type = ?", entity.FlagableTypeProduct).
|
|
||||||
Joins("LEFT JOIN flags AS tf ON tf.flagable_id = std.product_id AND tf.flagable_type = ?", entity.FlagableTypeProduct).
|
|
||||||
Where("r.project_flock_kandangs_id IN ?", projectFlockKandangIDs).
|
|
||||||
Where("r.record_datetime < ?", end).
|
|
||||||
Where("r.deleted_at IS NULL").
|
|
||||||
Where("(la.action IS NULL OR la.action != ?)", string(entity.ApprovalActionRejected))
|
|
||||||
|
|
||||||
query = query.Group("pfk.id").Order("pfk.id ASC")
|
|
||||||
|
|
||||||
if err := query.Scan(&rows).Error; err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
docRows := make([]struct {
|
docRows := make([]struct {
|
||||||
ProjectFlockKandangID uint
|
ProjectFlockKandangID uint
|
||||||
DocCost float64
|
DocCost float64
|
||||||
@@ -262,127 +207,7 @@ func (r *hppPerKandangRepository) GetFeedOvkDocCostByPeriod(ctx context.Context,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
budgetRows := make([]struct {
|
return rows, docSuppliers, nil
|
||||||
ProjectFlockKandangID uint
|
|
||||||
BudgetCost float64
|
|
||||||
}, 0)
|
|
||||||
|
|
||||||
pfkUsageSub := r.db.
|
|
||||||
Table("project_chickins AS pc").
|
|
||||||
Select(`
|
|
||||||
pc.project_flock_kandang_id,
|
|
||||||
SUM(pc.usage_qty) AS kandang_usage_qty`).
|
|
||||||
Group("pc.project_flock_kandang_id")
|
|
||||||
|
|
||||||
projectUsageSub := r.db.
|
|
||||||
Table("project_chickins AS pc").
|
|
||||||
Select(`
|
|
||||||
pfk.project_flock_id,
|
|
||||||
SUM(pc.usage_qty) AS project_usage_qty`).
|
|
||||||
Joins("JOIN project_flock_kandangs AS pfk ON pfk.id = pc.project_flock_kandang_id").
|
|
||||||
Group("pfk.project_flock_id")
|
|
||||||
|
|
||||||
budgetQuery := r.db.WithContext(ctx).
|
|
||||||
Table("project_flock_kandangs AS pfk").
|
|
||||||
Select(`
|
|
||||||
pfk.id AS project_flock_kandang_id,
|
|
||||||
COALESCE(SUM((pb.qty * pb.price) * COALESCE(k_usage.kandang_usage_qty, 0) / NULLIF(p_usage.project_usage_qty, 0)), 0) AS budget_cost`).
|
|
||||||
Joins("JOIN kandangs AS k ON k.id = pfk.kandang_id").
|
|
||||||
Joins("JOIN locations AS loc ON loc.id = k.location_id").
|
|
||||||
Joins("JOIN project_budgets AS pb ON pb.project_flock_id = pfk.project_flock_id").
|
|
||||||
Joins("LEFT JOIN (?) AS k_usage ON k_usage.project_flock_kandang_id = pfk.id", pfkUsageSub).
|
|
||||||
Joins("LEFT JOIN (?) AS p_usage ON p_usage.project_flock_id = pfk.project_flock_id", projectUsageSub).
|
|
||||||
Where("pfk.id IN (?)", projectFlockKandangIDs).
|
|
||||||
Group("pfk.id")
|
|
||||||
// budgetQuery = applyLocationFilters(budgetQuery, areaIDs, locationIDs, kandangIDs)
|
|
||||||
|
|
||||||
if err := budgetQuery.Scan(&budgetRows).Error; err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, budget := range budgetRows {
|
|
||||||
entry, ok := costMap[budget.ProjectFlockKandangID]
|
|
||||||
if !ok {
|
|
||||||
rows = append(rows, HppPerKandangCostRow{
|
|
||||||
ProjectFlockKandangID: budget.ProjectFlockKandangID,
|
|
||||||
})
|
|
||||||
entry = &rows[len(rows)-1]
|
|
||||||
costMap[budget.ProjectFlockKandangID] = entry
|
|
||||||
}
|
|
||||||
entry.BudgetCost += budget.BudgetCost
|
|
||||||
}
|
|
||||||
|
|
||||||
expenseRows := make([]struct {
|
|
||||||
ProjectFlockKandangID uint
|
|
||||||
ExpenseCost float64
|
|
||||||
}, 0)
|
|
||||||
|
|
||||||
expenseQuery := r.db.WithContext(ctx).
|
|
||||||
Table("project_flock_kandangs AS pfk").
|
|
||||||
Select(`
|
|
||||||
pfk.id AS project_flock_kandang_id,
|
|
||||||
COALESCE(SUM(er.qty * er.price), 0) AS expense_cost`).
|
|
||||||
Joins("JOIN kandangs AS k ON k.id = pfk.kandang_id").
|
|
||||||
Joins("JOIN locations AS loc ON loc.id = k.location_id").
|
|
||||||
Joins("JOIN expense_nonstocks AS en ON en.project_flock_kandang_id = pfk.id").
|
|
||||||
Joins("JOIN expense_realizations AS er ON er.expense_nonstock_id = en.id").
|
|
||||||
Where("pfk.id IN (?)", projectFlockKandangIDs).
|
|
||||||
Group("pfk.id")
|
|
||||||
// expenseQuery = applyLocationFilters(expenseQuery, areaIDs, locationIDs, kandangIDs)
|
|
||||||
|
|
||||||
if err := expenseQuery.Scan(&expenseRows).Error; err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, exp := range expenseRows {
|
|
||||||
entry, ok := costMap[exp.ProjectFlockKandangID]
|
|
||||||
if !ok {
|
|
||||||
rows = append(rows, HppPerKandangCostRow{
|
|
||||||
ProjectFlockKandangID: exp.ProjectFlockKandangID,
|
|
||||||
})
|
|
||||||
entry = &rows[len(rows)-1]
|
|
||||||
costMap[exp.ProjectFlockKandangID] = entry
|
|
||||||
}
|
|
||||||
entry.ExpenseCost += exp.ExpenseCost
|
|
||||||
}
|
|
||||||
|
|
||||||
feedSuppliers := make([]HppPerKandangSupplierRow, 0)
|
|
||||||
|
|
||||||
feedQuery := r.db.WithContext(ctx).
|
|
||||||
Table("recordings AS r").
|
|
||||||
Select("DISTINCT pfk.id AS project_flock_kandang_id, s.id AS supplier_id, s.name AS supplier_name, s.alias AS supplier_alias").
|
|
||||||
Joins("JOIN project_flock_kandangs AS pfk ON pfk.id = r.project_flock_kandangs_id").
|
|
||||||
Joins("JOIN kandangs AS k ON k.id = pfk.kandang_id").
|
|
||||||
Joins("JOIN locations AS loc ON loc.id = k.location_id").
|
|
||||||
Joins("LEFT JOIN recording_stocks AS rs ON rs.recording_id = r.id").
|
|
||||||
Joins("LEFT JOIN stock_allocations AS sa ON sa.usable_type = ? AND sa.usable_id = rs.id AND sa.status = ?", fifo.UsableKeyRecordingStock.String(), entity.StockAllocationStatusActive).
|
|
||||||
Joins("LEFT JOIN purchase_items AS pi ON pi.id = sa.stockable_id AND sa.stockable_type = ?", purchaseStockableKey).
|
|
||||||
Joins("LEFT JOIN purchases AS pur ON pur.id = pi.purchase_id").
|
|
||||||
Joins("LEFT JOIN suppliers AS s ON s.id = pur.supplier_id").
|
|
||||||
Joins("LEFT JOIN flags AS f ON f.flagable_id = pi.product_id AND f.flagable_type = ?", entity.FlagableTypeProduct).
|
|
||||||
Where("f.name IN ?", []utils.FlagType{utils.FlagPakan, utils.FlagOVK}).
|
|
||||||
Where("r.project_flock_kandangs_id IN (?)", projectFlockKandangIDs).
|
|
||||||
Where("r.record_datetime < ?", end).
|
|
||||||
Where("r.deleted_at IS NULL")
|
|
||||||
// feedQuery = applyLocationFilters(feedQuery, areaIDs, locationIDs, kandangIDs)
|
|
||||||
|
|
||||||
if err := feedQuery.Scan(&feedSuppliers).Error; err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := range feedSuppliers {
|
|
||||||
if _, exists := costMap[feedSuppliers[i].ProjectFlockKandangID]; !exists {
|
|
||||||
rows = append(rows, HppPerKandangCostRow{
|
|
||||||
ProjectFlockKandangID: feedSuppliers[i].ProjectFlockKandangID,
|
|
||||||
})
|
|
||||||
costMap[feedSuppliers[i].ProjectFlockKandangID] = &rows[len(rows)-1]
|
|
||||||
}
|
|
||||||
feedSuppliers[i].Category = "FEED"
|
|
||||||
}
|
|
||||||
|
|
||||||
supplierRows := append(docSuppliers, feedSuppliers...)
|
|
||||||
|
|
||||||
return rows, supplierRows, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *hppPerKandangRepository) GetEggProductionByProjectFlockKandangIDs(ctx context.Context, start, end time.Time, projectFlockKandangIDs []uint) (map[uint]HppPerKandangRow, error) {
|
func (r *hppPerKandangRepository) GetEggProductionByProjectFlockKandangIDs(ctx context.Context, start, end time.Time, projectFlockKandangIDs []uint) (map[uint]HppPerKandangRow, error) {
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ type repportService struct {
|
|||||||
ChickinRepo chickinRepo.ProjectChickinRepository
|
ChickinRepo chickinRepo.ProjectChickinRepository
|
||||||
RecordingRepo recordingRepo.RecordingRepository
|
RecordingRepo recordingRepo.RecordingRepository
|
||||||
ApprovalSvc approvalService.ApprovalService
|
ApprovalSvc approvalService.ApprovalService
|
||||||
|
HppSvc approvalService.HppService
|
||||||
PurchaseSupplierRepo repportRepo.PurchaseSupplierRepository
|
PurchaseSupplierRepo repportRepo.PurchaseSupplierRepository
|
||||||
DebtSupplierRepo repportRepo.DebtSupplierRepository
|
DebtSupplierRepo repportRepo.DebtSupplierRepository
|
||||||
HppPerKandangRepo repportRepo.HppPerKandangRepository
|
HppPerKandangRepo repportRepo.HppPerKandangRepository
|
||||||
@@ -85,6 +86,7 @@ func NewRepportService(
|
|||||||
chickinRepo chickinRepo.ProjectChickinRepository,
|
chickinRepo chickinRepo.ProjectChickinRepository,
|
||||||
recordingRepo recordingRepo.RecordingRepository,
|
recordingRepo recordingRepo.RecordingRepository,
|
||||||
approvalSvc approvalService.ApprovalService,
|
approvalSvc approvalService.ApprovalService,
|
||||||
|
hppSvc approvalService.HppService,
|
||||||
purchaseSupplierRepo repportRepo.PurchaseSupplierRepository,
|
purchaseSupplierRepo repportRepo.PurchaseSupplierRepository,
|
||||||
debtSupplierRepo repportRepo.DebtSupplierRepository,
|
debtSupplierRepo repportRepo.DebtSupplierRepository,
|
||||||
hppPerKandangRepo repportRepo.HppPerKandangRepository,
|
hppPerKandangRepo repportRepo.HppPerKandangRepository,
|
||||||
@@ -104,6 +106,7 @@ func NewRepportService(
|
|||||||
ChickinRepo: chickinRepo,
|
ChickinRepo: chickinRepo,
|
||||||
RecordingRepo: recordingRepo,
|
RecordingRepo: recordingRepo,
|
||||||
ApprovalSvc: approvalSvc,
|
ApprovalSvc: approvalSvc,
|
||||||
|
HppSvc: hppSvc,
|
||||||
PurchaseSupplierRepo: purchaseSupplierRepo,
|
PurchaseSupplierRepo: purchaseSupplierRepo,
|
||||||
DebtSupplierRepo: debtSupplierRepo,
|
DebtSupplierRepo: debtSupplierRepo,
|
||||||
HppPerKandangRepo: hppPerKandangRepo,
|
HppPerKandangRepo: hppPerKandangRepo,
|
||||||
@@ -1512,29 +1515,29 @@ func (s *repportService) GetHppPerKandang(ctx *fiber.Ctx) (*dto.HppPerKandangRes
|
|||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
eggMap, err := s.HppPerKandangRepo.GetEggProductionByProjectFlockKandangIDs(ctx.Context(), startOfDay, endOfDay, validPfkIDs)
|
// eggMap, err := s.HppPerKandangRepo.GetEggProductionByProjectFlockKandangIDs(ctx.Context(), startOfDay, endOfDay, validPfkIDs)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return nil, nil, err
|
// return nil, nil, err
|
||||||
}
|
// }
|
||||||
for pfkID, egg := range eggMap {
|
// for pfkID, egg := range eggMap {
|
||||||
if rowIdx, ok := pfkIndex[pfkID]; ok {
|
// if rowIdx, ok := pfkIndex[pfkID]; ok {
|
||||||
repoRows[rowIdx].EggProductionWeightKgRemaining = egg.EggProductionWeightKgRemaining
|
// repoRows[rowIdx].EggProductionWeightKgRemaining = egg.EggProductionWeightKgRemaining
|
||||||
repoRows[rowIdx].EggProductionPiecesRemaining = egg.EggProductionPiecesRemaining
|
// repoRows[rowIdx].EggProductionPiecesRemaining = egg.EggProductionPiecesRemaining
|
||||||
repoRows[rowIdx].EggProductionTotalWeightKg = egg.EggProductionTotalWeightKg
|
// repoRows[rowIdx].EggProductionTotalWeightKg = egg.EggProductionTotalWeightKg
|
||||||
repoRows[rowIdx].EggProductionTotalPieces = egg.EggProductionTotalPieces
|
// repoRows[rowIdx].EggProductionTotalPieces = egg.EggProductionTotalPieces
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
costMap := make(map[uint]HppCostAggregate, len(costRows))
|
costMap := make(map[uint]HppCostAggregate, len(costRows))
|
||||||
for _, row := range costRows {
|
for _, row := range costRows {
|
||||||
costMap[row.ProjectFlockKandangID] = HppCostAggregate{
|
costMap[row.ProjectFlockKandangID] = HppCostAggregate{
|
||||||
FeedCost: row.FeedCost,
|
// FeedCost: row.FeedCost,
|
||||||
OvkCost: row.OvkCost,
|
// OvkCost: row.OvkCost,
|
||||||
DocCost: row.DocCost,
|
DocCost: row.DocCost,
|
||||||
DocQty: row.DocQty,
|
DocQty: row.DocQty,
|
||||||
BudgetCost: row.BudgetCost,
|
// BudgetCost: row.BudgetCost,
|
||||||
ExpenseCost: row.ExpenseCost,
|
// ExpenseCost: row.ExpenseCost,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1608,19 +1611,33 @@ func (s *repportService) GetHppPerKandang(ctx *fiber.Ctx) (*dto.HppPerKandangRes
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
eggPiecesFloatRemaining := row.EggProductionPiecesRemaining
|
var eggPiecesFloatRemaining float64
|
||||||
|
var eggRemainingWeightFloatRemaining float64
|
||||||
|
var eggTotalPiecesFloat float64
|
||||||
|
var eggWeightFloat float64
|
||||||
|
eggHpp := 0.0
|
||||||
|
if s.HppSvc != nil {
|
||||||
|
hppCost, err := s.HppSvc.CalculateHppCost(row.ProjectFlockKandangID, &endOfDay)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
if hppCost != nil {
|
||||||
|
eggRemainingWeightFloatRemaining = hppCost.Estimation.Kg - hppCost.Real.Kg
|
||||||
|
eggPiecesFloatRemaining = hppCost.Estimation.Butir - hppCost.Real.Butir
|
||||||
|
eggHpp = hppCost.Estimation.HargaKg
|
||||||
|
eggTotalPiecesFloat = hppCost.Estimation.Butir
|
||||||
|
eggWeightFloat = hppCost.Estimation.Kg
|
||||||
|
}
|
||||||
|
}
|
||||||
if math.IsNaN(eggPiecesFloatRemaining) || math.IsInf(eggPiecesFloatRemaining, 0) {
|
if math.IsNaN(eggPiecesFloatRemaining) || math.IsInf(eggPiecesFloatRemaining, 0) {
|
||||||
eggPiecesFloatRemaining = 0
|
eggPiecesFloatRemaining = 0
|
||||||
}
|
}
|
||||||
eggTotalPiecesFloat := row.EggProductionTotalPieces
|
|
||||||
if math.IsNaN(eggTotalPiecesFloat) || math.IsInf(eggTotalPiecesFloat, 0) {
|
if math.IsNaN(eggTotalPiecesFloat) || math.IsInf(eggTotalPiecesFloat, 0) {
|
||||||
eggTotalPiecesFloat = 0
|
eggTotalPiecesFloat = 0
|
||||||
}
|
}
|
||||||
eggRemainingWeightFloatRemaining := row.EggProductionWeightKgRemaining
|
|
||||||
if math.IsNaN(eggRemainingWeightFloatRemaining) || math.IsInf(eggRemainingWeightFloatRemaining, 0) {
|
if math.IsNaN(eggRemainingWeightFloatRemaining) || math.IsInf(eggRemainingWeightFloatRemaining, 0) {
|
||||||
eggRemainingWeightFloatRemaining = 0
|
eggRemainingWeightFloatRemaining = 0
|
||||||
}
|
}
|
||||||
eggWeightFloat := row.EggProductionTotalWeightKg
|
|
||||||
if math.IsNaN(eggWeightFloat) || math.IsInf(eggWeightFloat, 0) {
|
if math.IsNaN(eggWeightFloat) || math.IsInf(eggWeightFloat, 0) {
|
||||||
eggWeightFloat = 0
|
eggWeightFloat = 0
|
||||||
}
|
}
|
||||||
@@ -1644,11 +1661,6 @@ func (s *repportService) GetHppPerKandang(ctx *fiber.Ctx) (*dto.HppPerKandangRes
|
|||||||
rangeKey := weightRangeKey{Min: weightMin, Max: weightMax}
|
rangeKey := weightRangeKey{Min: weightMin, Max: weightMax}
|
||||||
|
|
||||||
costEntry := costMap[row.ProjectFlockKandangID]
|
costEntry := costMap[row.ProjectFlockKandangID]
|
||||||
totalCost := costEntry.FeedCost + costEntry.OvkCost + costEntry.DocCost + costEntry.BudgetCost + costEntry.ExpenseCost
|
|
||||||
eggHpp := 0.0
|
|
||||||
if eggWeightFloat > 0 {
|
|
||||||
eggHpp = (totalCost / eggWeightFloat) / 1000
|
|
||||||
}
|
|
||||||
|
|
||||||
rowEggPieces := int64(math.Round(eggPiecesFloatRemaining))
|
rowEggPieces := int64(math.Round(eggPiecesFloatRemaining))
|
||||||
rowEggValue := int64(eggHpp * eggRemainingWeightFloatRemaining)
|
rowEggValue := int64(eggHpp * eggRemainingWeightFloatRemaining)
|
||||||
|
|||||||
Reference in New Issue
Block a user