@@ -133,39 +133,43 @@ func (milestones MilestoneList) LoadTotalTrackedTimes(ctx context.Context) error
133133// LoadTotalWeight loads for every milestone in the list the TotalWeight by a batch request 
134134func  (milestones  MilestoneList ) LoadTotalWeight (ctx  context.Context ) error  {
135135	type  totalWeightByMilestone  struct  {
136- 		MilestoneID  int64 
137- 		Weight       int 
136+ 		MilestoneID   int64 
137+ 		Weight        int 
138+ 		WeightClosed  int 
138139	}
139140	if  len (milestones ) ==  0  {
140141		return  nil 
141142	}
142- 	trackedTimes  :=  make (map [int64 ]int , len (milestones ))
143143
144- 	// Get total tracked time by milestone_id 
144+ 	weight  :=  make (map [int64 ]int , len (milestones ))
145+ 	closedWeight  :=  make (map [int64 ]int , len (milestones ))
146+ 
145147	rows , err  :=  db .GetEngine (ctx ).Table ("issue" ).
146148		Join ("INNER" , "milestone" , "issue.milestone_id = milestone.id" ).
147- 		Select ("milestone_id, sum(weight) as weight" ).
149+ 		Select ("milestone_id, sum(weight) as weight, sum(CASE WHEN is_closed THEN 0 ELSE weight END) as weight_closed " ).
148150		In ("milestone_id" , milestones .getMilestoneIDs ()).
149151		GroupBy ("milestone_id" ).
150152		Rows (new (totalWeightByMilestone ))
151153	if  err  !=  nil  {
152154		return  err 
153155	}
154- 
155156	defer  rows .Close ()
156157
157158	for  rows .Next () {
158- 		var  totalTime  totalWeightByMilestone 
159- 		err  =  rows .Scan (& totalTime )
159+ 		var  totalWeight  totalWeightByMilestone 
160+ 		err  =  rows .Scan (& totalWeight )
160161		if  err  !=  nil  {
161162			return  err 
162163		}
163- 		trackedTimes [totalTime .MilestoneID ] =  totalTime .Weight 
164+ 		weight [totalWeight .MilestoneID ] =  totalWeight .Weight 
165+ 		closedWeight [totalWeight .MilestoneID ] =  totalWeight .WeightClosed 
164166	}
165167
166168	for  _ , milestone  :=  range  milestones  {
167- 		milestone .TotalWeight  =  trackedTimes [milestone .ID ]
169+ 		milestone .TotalWeight  =  weight [milestone .ID ]
170+ 		milestone .WeightedCompleteness  =  closedWeight [milestone .ID ] *  100  /  milestone .TotalWeight 
168171	}
172+ 
169173	return  nil 
170174}
171175
0 commit comments