package dto import ( "time" entity "gitlab.com/mbugroup/lti-api.git/internal/entities" approvalDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/approvals/dto" areaDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/master/areas/dto" fcrDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/master/fcrs/dto" flockDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/master/flocks/dto" kandangDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/master/kandangs/dto" locationDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/master/locations/dto" userDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/users/dto" "gitlab.com/mbugroup/lti-api.git/internal/utils" approvalutils "gitlab.com/mbugroup/lti-api.git/internal/utils/approvals" ) type ProjectFlockBaseDTO struct { Id uint `json:"id"` Period int `json:"period"` } type ProjectFlockListDTO struct { ProjectFlockBaseDTO Flock *flockDTO.FlockBaseDTO `json:"flock,omitempty"` Area *areaDTO.AreaBaseDTO `json:"area,omitempty"` Category string `json:"category"` Fcr *fcrDTO.FcrBaseDTO `json:"fcr,omitempty"` Location *locationDTO.LocationBaseDTO `json:"location,omitempty"` Kandangs []kandangDTO.KandangBaseDTO `json:"kandangs,omitempty"` CreatedUser *userDTO.UserBaseDTO `json:"created_user"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` Approval approvalDTO.ApprovalBaseDTO `json:"approval"` } type ProjectFlockDetailDTO struct { ProjectFlockListDTO } type FlockPeriodDTO struct { Flock flockDTO.FlockBaseDTO `json:"flock"` NextPeriod int `json:"next_period"` } func ToProjectFlockListDTO(e entity.ProjectFlock) ProjectFlockListDTO { var createdUser *userDTO.UserBaseDTO if e.CreatedUser.Id != 0 { mapped := userDTO.ToUserBaseDTO(e.CreatedUser) createdUser = &mapped } var kandangSummaries []kandangDTO.KandangBaseDTO if len(e.Kandangs) > 0 { kandangSummaries = make([]kandangDTO.KandangBaseDTO, len(e.Kandangs)) for i, kandang := range e.Kandangs { kandangSummaries[i] = kandangDTO.ToKandangBaseDTO(kandang) } } var flockSummary *flockDTO.FlockBaseDTO if e.Flock.Id != 0 { mapped := flockDTO.ToFlockBaseDTO(e.Flock) flockSummary = &mapped } var areaSummary *areaDTO.AreaBaseDTO if e.Area.Id != 0 { mapped := areaDTO.ToAreaBaseDTO(e.Area) areaSummary = &mapped } var fcrSummary *fcrDTO.FcrBaseDTO if e.Fcr.Id != 0 { mapped := fcrDTO.ToFcrBaseDTO(e.Fcr) fcrSummary = &mapped } var locationSummary *locationDTO.LocationBaseDTO if e.Location.Id != 0 { mapped := locationDTO.ToLocationBaseDTO(e.Location) locationSummary = &mapped } latestApproval := defaultProjectFlockLatestApproval(e) if e.LatestApproval != nil { snapshot := approvalDTO.ToApprovalDTO(*e.LatestApproval) latestApproval = snapshot } return ProjectFlockListDTO{ ProjectFlockBaseDTO: createProjectFlockBaseDTO(e), Flock: flockSummary, Area: areaSummary, Kandangs: kandangSummaries, Category: e.Category, Fcr: fcrSummary, Location: locationSummary, CreatedAt: e.CreatedAt, UpdatedAt: e.UpdatedAt, CreatedUser: createdUser, Approval: latestApproval, } } func ToProjectFlockListDTOs(items []entity.ProjectFlock) []ProjectFlockListDTO { result := make([]ProjectFlockListDTO, len(items)) for i, item := range items { result[i] = ToProjectFlockListDTO(item) } return result } func ToProjectFlockDetailDTO(e entity.ProjectFlock) ProjectFlockDetailDTO { return ProjectFlockDetailDTO{ ProjectFlockListDTO: ToProjectFlockListDTO(e), } } func defaultProjectFlockLatestApproval(e entity.ProjectFlock) approvalDTO.ApprovalBaseDTO { result := approvalDTO.ApprovalBaseDTO{} step := utils.ProjectFlockStepPengajuan if step > 0 { result.StepNumber = uint16(step) if label, ok := approvalutils.ApprovalStepName(utils.ApprovalWorkflowProjectFlock, step); ok { result.StepName = label } else if label, ok := utils.ProjectFlockApprovalSteps[step]; ok { result.StepName = label } } if e.CreatedUser.Id != 0 { result.ActionBy = userDTO.ToUserBaseDTO(e.CreatedUser) } else if e.CreatedBy != 0 { result.ActionBy = userDTO.UserBaseDTO{ Id: e.CreatedBy, IdUser: int64(e.CreatedBy), } } return result } func createProjectFlockBaseDTO(e entity.ProjectFlock) ProjectFlockBaseDTO { return ProjectFlockBaseDTO{ Id: e.Id, Period: e.Period, } } func ToFlockSummaryDTO(e entity.Flock) flockDTO.FlockBaseDTO { return flockDTO.FlockBaseDTO{ Id: e.Id, Name: e.Name, } } func ToFlockPeriodSummaryDTO(flock entity.Flock, next int) FlockPeriodDTO { return FlockPeriodDTO{ Flock: ToFlockSummaryDTO(flock), NextPeriod: next, } }