feat/BE/US-284/TASK-,299-Create API (GET ONE in tab Perhitungan Sapronak),add filtering by flag

This commit is contained in:
ragilap
2025-12-08 13:40:37 +07:00
parent a8434a5246
commit e0e2d91db5
5 changed files with 163 additions and 41 deletions
@@ -8,8 +8,8 @@ import (
)
type SapronakFormatter interface {
ProjectPayload(reports []dto.SapronakReportDTO) dto.SapronakProjectAggregatedDTO
KandangPayload(report *dto.SapronakReportDTO) dto.SapronakProjectAggregatedDTO
ProjectPayload(reports []dto.SapronakReportDTO, flag string) dto.SapronakProjectAggregatedDTO
KandangPayload(report *dto.SapronakReportDTO, flag string) dto.SapronakProjectAggregatedDTO
}
type sapronakFormatter struct{}
@@ -18,40 +18,42 @@ func NewSapronakFormatter() SapronakFormatter {
return &sapronakFormatter{}
}
func (f *sapronakFormatter) ProjectPayload(reports []dto.SapronakReportDTO) dto.SapronakProjectAggregatedDTO {
result := dto.SapronakProjectAggregatedDTO{
Doc: dto.SapronakCategoryDTO{},
Ovk: dto.SapronakCategoryDTO{},
Pakan: dto.SapronakCategoryDTO{},
}
func (f *sapronakFormatter) ProjectPayload(reports []dto.SapronakReportDTO, flag string) dto.SapronakProjectAggregatedDTO {
result := dto.SapronakProjectAggregatedDTO{}
if len(reports) == 0 {
return result
}
rep := reports[0]
return f.mapFromReport(&rep)
return f.mapFromReport(&rep, flag)
}
func (f *sapronakFormatter) KandangPayload(report *dto.SapronakReportDTO) dto.SapronakProjectAggregatedDTO {
return f.mapFromReport(report)
func (f *sapronakFormatter) KandangPayload(report *dto.SapronakReportDTO, flag string) dto.SapronakProjectAggregatedDTO {
return f.mapFromReport(report, flag)
}
func (f *sapronakFormatter) mapFromReport(report *dto.SapronakReportDTO) dto.SapronakProjectAggregatedDTO {
result := dto.SapronakProjectAggregatedDTO{
Doc: dto.SapronakCategoryDTO{},
Ovk: dto.SapronakCategoryDTO{},
Pakan: dto.SapronakCategoryDTO{},
}
func (f *sapronakFormatter) mapFromReport(report *dto.SapronakReportDTO, flag string) dto.SapronakProjectAggregatedDTO {
result := dto.SapronakProjectAggregatedDTO{}
if report == nil {
return result
}
byFlag := map[string]*dto.SapronakCategoryDTO{
"DOC": &result.Doc,
"OVK": &result.Ovk,
"PAKAN": &result.Pakan,
filter := strings.ToUpper(strings.TrimSpace(flag))
byFlag := map[string]**dto.SapronakCategoryDTO{}
if filter == "" || filter == "DOC" {
result.Doc = &dto.SapronakCategoryDTO{}
byFlag["DOC"] = &result.Doc
}
if filter == "" || filter == "OVK" {
result.Ovk = &dto.SapronakCategoryDTO{}
byFlag["OVK"] = &result.Ovk
}
if filter == "" || filter == "PAKAN" {
result.Pakan = &dto.SapronakCategoryDTO{}
byFlag["PAKAN"] = &result.Pakan
}
formatDate := func(t *time.Time) string {
@@ -63,10 +65,11 @@ func (f *sapronakFormatter) mapFromReport(report *dto.SapronakReportDTO) dto.Sap
for _, group := range report.Groups {
flag := strings.ToUpper(group.Flag)
target := byFlag[flag]
if target == nil {
ptr := byFlag[flag]
if ptr == nil || *ptr == nil {
continue
}
target := *ptr
for idx, item := range group.Items {
qtyUsed := item.QtyKeluar
if qtyUsed == 0 {
@@ -90,6 +93,9 @@ func (f *sapronakFormatter) mapFromReport(report *dto.SapronakReportDTO) dto.Sap
}
buildTotals := func(cat *dto.SapronakCategoryDTO, label string) {
if cat == nil {
return
}
var qtyIn, qtyOut, qtyUsed, total float64
for _, r := range cat.Rows {
qtyIn += r.QtyIn
@@ -111,9 +117,9 @@ func (f *sapronakFormatter) mapFromReport(report *dto.SapronakReportDTO) dto.Sap
}
}
buildTotals(&result.Doc, "TOTAL DOC")
buildTotals(&result.Ovk, "TOTAL OVK")
buildTotals(&result.Pakan, "TOTAL PAKAN")
buildTotals(result.Doc, "TOTAL DOC")
buildTotals(result.Ovk, "TOTAL OVK")
buildTotals(result.Pakan, "TOTAL PAKAN")
return result
}