mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-25 15:55:44 +00:00
feat/BE/US-284/TASK-,299-Create API (GET ONE in tab Perhitungan Sapronak),add filtering by flag
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user