mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 13:31:56 +00:00
127 lines
3.5 KiB
Go
127 lines
3.5 KiB
Go
package dto
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
|
|
userDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/users/dto"
|
|
)
|
|
|
|
// === DTO Structs ===
|
|
|
|
type ClosingRelationDTO struct {
|
|
Id uint `json:"id"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
type ClosingListDTO struct {
|
|
Id uint `json:"id"`
|
|
Name string `json:"name"`
|
|
CreatedUser *userDTO.UserRelationDTO `json:"created_user"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
type ClosingDetailDTO struct {
|
|
ClosingListDTO
|
|
}
|
|
|
|
type ClosingSummaryDTO struct {
|
|
LocationID uint `json:"location_id"`
|
|
Periode int `json:"periode"`
|
|
JenisProduk string `json:"jenis_produk"`
|
|
LabelPopulasi string `json:"label_populasi"`
|
|
JumlahPopulasi int `json:"jumlah_populasi"`
|
|
JumlahPopulasiFormatted string `json:"jumlah_populasi_formatted"`
|
|
JenisProject string `json:"jenis_project"`
|
|
KandangAktif int `json:"kandang_aktif"`
|
|
KandangAktifFormatted string `json:"kandang_aktif_formatted"`
|
|
StatusPembayaranPenjualan string `json:"status_pembayaran_penjualan"`
|
|
StatusPembayaranMitra string `json:"status_pembayaran_mitra"`
|
|
StatusProject string `json:"status_project"`
|
|
StatusClosing string `json:"status_closing"`
|
|
}
|
|
|
|
func ToClosingSummaryDTO(project entity.ProjectFlock, statusProject, statusClosing string) ClosingSummaryDTO {
|
|
history := project.KandangHistory
|
|
|
|
period := maxPeriod(history)
|
|
kandangCount := len(history)
|
|
population := sumPopulation(history)
|
|
populationInt := int(population)
|
|
|
|
return ClosingSummaryDTO{
|
|
LocationID: project.LocationId,
|
|
Periode: period,
|
|
JenisProduk: project.Category,
|
|
LabelPopulasi: "",
|
|
JumlahPopulasi: populationInt,
|
|
JumlahPopulasiFormatted: fmt.Sprintf("%d Ekor", populationInt),
|
|
JenisProject: "",
|
|
KandangAktif: kandangCount,
|
|
KandangAktifFormatted: fmt.Sprintf("%d Kandang", kandangCount),
|
|
StatusPembayaranPenjualan: "Tempo",
|
|
StatusPembayaranMitra: "",
|
|
StatusProject: statusProject,
|
|
StatusClosing: statusClosing,
|
|
}
|
|
}
|
|
|
|
func maxPeriod(history []entity.ProjectFlockKandang) int {
|
|
max := 0
|
|
for _, h := range history {
|
|
if h.Period > max {
|
|
max = h.Period
|
|
}
|
|
}
|
|
return max
|
|
}
|
|
|
|
func sumPopulation(history []entity.ProjectFlockKandang) float64 {
|
|
var total float64
|
|
for _, h := range history {
|
|
for _, chickin := range h.Chickins {
|
|
total += chickin.UsageQty + chickin.PendingUsageQty
|
|
}
|
|
}
|
|
return total
|
|
}
|
|
|
|
// === Mapper Functions ===
|
|
|
|
func ToClosingRelationDTO(e entity.ProjectFlock) ClosingRelationDTO {
|
|
return ClosingRelationDTO{
|
|
Id: e.Id,
|
|
}
|
|
}
|
|
|
|
func ToClosingListDTO(e entity.ProjectFlock) ClosingListDTO {
|
|
var createdUser *userDTO.UserRelationDTO
|
|
if e.CreatedUser.Id != 0 {
|
|
mapped := userDTO.ToUserRelationDTO(e.CreatedUser)
|
|
createdUser = &mapped
|
|
}
|
|
|
|
return ClosingListDTO{
|
|
Id: e.Id,
|
|
CreatedAt: e.CreatedAt,
|
|
UpdatedAt: e.UpdatedAt,
|
|
CreatedUser: createdUser,
|
|
}
|
|
}
|
|
|
|
func ToClosingListDTOs(e []entity.ProjectFlock) []ClosingListDTO {
|
|
result := make([]ClosingListDTO, len(e))
|
|
for i, r := range e {
|
|
result[i] = ToClosingListDTO(r)
|
|
}
|
|
return result
|
|
}
|
|
|
|
func ToClosingDetailDTO(e entity.ProjectFlock) ClosingDetailDTO {
|
|
return ClosingDetailDTO{
|
|
ClosingListDTO: ToClosingListDTO(e),
|
|
}
|
|
}
|