package dto import ( "time" entity "gitlab.com/mbugroup/lti-api.git/internal/entities" deliveryOrdersDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/marketing/delivery-orderss/dto" customerDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/master/customers/dto" kandangDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/master/kandangs/dto" productDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/master/products/dto" ) // === Response DTO === type SalesDTO struct { Id uint `json:"id"` RealizationDate time.Time `json:"realization_date"` Age int `json:"age"` DoNumber string `json:"do_number"` Product *productDTO.ProductRelationDTO `json:"product,omitempty"` Customer *customerDTO.CustomerRelationDTO `json:"customer,omitempty"` Qty float64 `json:"qty"` Weight float64 `json:"weight"` AvgWeight float64 `json:"avg_weight"` Price float64 `json:"price"` TotalPrice float64 `json:"total_price"` Kandang *kandangDTO.KandangRelationDTO `json:"kandang,omitempty"` PaymentStatus string `json:"payment_status"` } type PenjualanRealisasiResponseDTO struct { ProjectType string `json:"project_type"` FlockId uint `json:"flock_id"` Period int `json:"period"` Sales []SalesDTO `json:"sales"` } // === Mapper Functions === func ToSalesDTO(e entity.MarketingDeliveryProduct) SalesDTO { // todo: usia ayam masih dummy age := 0 var product *productDTO.ProductRelationDTO if e.MarketingProduct.ProductWarehouse.Product.Id != 0 { mapped := productDTO.ToProductRelationDTO(e.MarketingProduct.ProductWarehouse.Product) product = &mapped } var customer *customerDTO.CustomerRelationDTO if e.MarketingProduct.Marketing.Customer.Id != 0 { mapped := customerDTO.ToCustomerRelationDTO(e.MarketingProduct.Marketing.Customer) customer = &mapped } var kandang *kandangDTO.KandangRelationDTO if e.MarketingProduct.ProductWarehouse.ProjectFlockKandang != nil && e.MarketingProduct.ProductWarehouse.ProjectFlockKandang.Kandang.Id != 0 { mapped := kandangDTO.ToKandangRelationDTO(e.MarketingProduct.ProductWarehouse.ProjectFlockKandang.Kandang) kandang = &mapped } doNumber := deliveryOrdersDTO.GenerateDeliveryOrderNumber(e.MarketingProduct.Marketing.SoNumber, e.DeliveryDate, e.MarketingProduct.ProductWarehouse.Warehouse.Id) return SalesDTO{ Id: e.Id, RealizationDate: *e.DeliveryDate, Age: age, DoNumber: doNumber, Product: product, Customer: customer, Qty: e.Qty, Weight: e.TotalWeight, AvgWeight: e.AvgWeight, Price: e.UnitPrice, TotalPrice: e.TotalPrice, Kandang: kandang, PaymentStatus: "Paid", } } func ToSalesDTOs(e []entity.MarketingDeliveryProduct) []SalesDTO { result := make([]SalesDTO, len(e)) for i, r := range e { result[i] = ToSalesDTO(r) } return result } func ToPenjualanRealisasiResponseDTO(projectType string, projectFlockID uint, e []entity.MarketingDeliveryProduct) PenjualanRealisasiResponseDTO { period := extractPeriodFromRealisasi(e) return PenjualanRealisasiResponseDTO{ ProjectType: projectType, FlockId: projectFlockID, Period: period, Sales: ToSalesDTOs(e), } } func extractPeriodFromRealisasi(realisasi []entity.MarketingDeliveryProduct) int { if len(realisasi) > 0 { for _, item := range realisasi { if item.MarketingProduct.ProductWarehouse.ProjectFlockKandang != nil { return item.MarketingProduct.ProductWarehouse.ProjectFlockKandang.Period } } } return 0 }