mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-24 15:25:43 +00:00
feat(BE): enhance ProjectFlockKandang structure and approval fetching methods
This commit is contained in:
+66
-25
@@ -98,23 +98,8 @@ func (s projectFlockKandangService) GetAll(c *fiber.Ctx, params *validation.Quer
|
||||
}
|
||||
|
||||
if s.ApprovalSvc != nil {
|
||||
projectFlockKandangIDs := make([]uint, len(projectFlockKandangs))
|
||||
for i, pfk := range projectFlockKandangs {
|
||||
projectFlockKandangIDs[i] = pfk.Id
|
||||
}
|
||||
|
||||
approvalMap, err := s.ApprovalSvc.LatestByTargets(c.Context(), utils.ApprovalWorkflowProjectFlockKandang, projectFlockKandangIDs, func(db *gorm.DB) *gorm.DB {
|
||||
return db.Preload("ActionUser")
|
||||
})
|
||||
if err != nil {
|
||||
s.Log.Warnf("Failed to fetch approvals for projectFlockKandangs: %+v", err)
|
||||
} else {
|
||||
for i := range projectFlockKandangs {
|
||||
if approval, ok := approvalMap[projectFlockKandangs[i].Id]; ok {
|
||||
projectFlockKandangs[i].LatestApproval = approval
|
||||
}
|
||||
}
|
||||
}
|
||||
s.fetchProjectFlockApprovals(c, projectFlockKandangs)
|
||||
s.fetchChickinApprovals(c, projectFlockKandangs)
|
||||
}
|
||||
|
||||
return projectFlockKandangs, total, nil
|
||||
@@ -130,14 +115,8 @@ func (s projectFlockKandangService) GetOne(c *fiber.Ctx, id uint) (*entity.Proje
|
||||
}
|
||||
|
||||
if len(projectFlockKandang.Chickins) > 0 && s.ApprovalSvc != nil {
|
||||
latest, err := s.ApprovalSvc.LatestByTarget(c.Context(), utils.ApprovalWorkflowProjectFlockKandang, projectFlockKandang.Id, nil)
|
||||
if err != nil {
|
||||
s.Log.Errorf("Failed to fetch latest kandang approval for projectFlockKandang %d: %+v", projectFlockKandang.Id, err)
|
||||
}
|
||||
|
||||
if latest != nil {
|
||||
projectFlockKandang.LatestApproval = latest
|
||||
}
|
||||
s.fetchProjectFlockApproval(c, projectFlockKandang)
|
||||
s.fetchChickinApproval(c, projectFlockKandang)
|
||||
}
|
||||
|
||||
availableQtyMap, err := s.getAvailableQuantities(c, projectFlockKandang)
|
||||
@@ -164,6 +143,68 @@ func (s projectFlockKandangService) GetOne(c *fiber.Ctx, id uint) (*entity.Proje
|
||||
return projectFlockKandang, availableQtyMap, productWarehouses, nil
|
||||
}
|
||||
|
||||
func (s projectFlockKandangService) fetchProjectFlockApprovals(c *fiber.Ctx, projectFlockKandangs []entity.ProjectFlockKandang) {
|
||||
projectFlockKandangIDs := make([]uint, len(projectFlockKandangs))
|
||||
for i, pfk := range projectFlockKandangs {
|
||||
projectFlockKandangIDs[i] = pfk.Id
|
||||
}
|
||||
|
||||
approvalMap, err := s.ApprovalSvc.LatestByTargets(c.Context(), utils.ApprovalWorkflowProjectFlockKandang, projectFlockKandangIDs, func(db *gorm.DB) *gorm.DB {
|
||||
return db.Preload("ActionUser")
|
||||
})
|
||||
if err != nil {
|
||||
s.Log.Warnf("Failed to fetch approvals for projectFlockKandangs: %+v", err)
|
||||
} else {
|
||||
for i := range projectFlockKandangs {
|
||||
if approval, ok := approvalMap[projectFlockKandangs[i].Id]; ok {
|
||||
projectFlockKandangs[i].LatestProjectFlockApproval = approval
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s projectFlockKandangService) fetchChickinApprovals(c *fiber.Ctx, projectFlockKandangs []entity.ProjectFlockKandang) {
|
||||
projectFlockKandangIDs := make([]uint, len(projectFlockKandangs))
|
||||
for i, pfk := range projectFlockKandangs {
|
||||
projectFlockKandangIDs[i] = pfk.Id
|
||||
}
|
||||
|
||||
chickinApprovalMap, err := s.ApprovalSvc.LatestByTargets(c.Context(), utils.ApprovalWorkflowChickin, projectFlockKandangIDs, func(db *gorm.DB) *gorm.DB {
|
||||
return db.Preload("ActionUser")
|
||||
})
|
||||
if err != nil {
|
||||
s.Log.Warnf("Failed to fetch chickin approvals for projectFlockKandangs: %+v", err)
|
||||
} else {
|
||||
for i := range projectFlockKandangs {
|
||||
if approval, ok := chickinApprovalMap[projectFlockKandangs[i].Id]; ok {
|
||||
projectFlockKandangs[i].LatestChickinApproval = approval
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s projectFlockKandangService) fetchProjectFlockApproval(c *fiber.Ctx, projectFlockKandang *entity.ProjectFlockKandang) {
|
||||
latest, err := s.ApprovalSvc.LatestByTarget(c.Context(), utils.ApprovalWorkflowProjectFlockKandang, projectFlockKandang.Id, nil)
|
||||
if err != nil {
|
||||
s.Log.Errorf("Failed to fetch latest kandang approval for projectFlockKandang %d: %+v", projectFlockKandang.Id, err)
|
||||
}
|
||||
|
||||
if latest != nil {
|
||||
projectFlockKandang.LatestProjectFlockApproval = latest
|
||||
}
|
||||
}
|
||||
|
||||
func (s projectFlockKandangService) fetchChickinApproval(c *fiber.Ctx, projectFlockKandang *entity.ProjectFlockKandang) {
|
||||
latestChickin, err := s.ApprovalSvc.LatestByTarget(c.Context(), utils.ApprovalWorkflowChickin, projectFlockKandang.Id, nil)
|
||||
if err != nil {
|
||||
s.Log.Errorf("Failed to fetch latest chickin approval for projectFlockKandang %d: %+v", projectFlockKandang.Id, err)
|
||||
}
|
||||
|
||||
if latestChickin != nil {
|
||||
projectFlockKandang.LatestChickinApproval = latestChickin
|
||||
}
|
||||
}
|
||||
|
||||
func (s projectFlockKandangService) getAvailableQuantities(c *fiber.Ctx, projectFlockKandang *entity.ProjectFlockKandang) (map[uint]float64, error) {
|
||||
if projectFlockKandang.Kandang.Id == 0 || s.WarehouseRepo == nil || s.ProductWarehouseRepo == nil {
|
||||
return nil, nil
|
||||
|
||||
Reference in New Issue
Block a user