public static TocExsRow createProductForCompany(int companyId, string prodUrl) { //TreeListTextColumn var product = Lib.prodDir[prodUrl]; var company = Lib.company(companyId); lock (product) { var allUsers = company.UserDir.Values.Select(usr => usr.getProductData(prodUrl)).Where(pd => pd != null).ToArray(); if (allUsers.Length == 0) return null; //exCount a tempData foreach (var t in product.scan()) t.tempData = new TocExsRow() { exCount = t.exCount * allUsers.Length, toc = t }; //skiped foreach (var userData in allUsers) { if (userData.SkipedIds == null) continue; foreach (var skId in userData.SkipedIds) { var toc = Lib.tocIdsDir[skId]; UserEx existingEx; //zaloz (pokud neexistuji) pro usera cviceni a nastav mu isSkiped foreach (var t in toc.scan().Where(t => t.isType(CourseMeta.runtimeType.ex))) { //pro vsechna child cviceni Skipped uzlu: if (!userData.Exercises.TryGetValue(t.Id, out existingEx)) userData.Exercises.Add(t.Id, existingEx = new UserEx { Toc = t, User = userData.user, Product = product }); existingEx.isSkiped = true; //nastav isSkipped } } } //exercises foreach (var exGroup in allUsers.SelectMany(u => u.Exercises.Values).GroupBy(e => e.Id)) Lib.tocIdsDir[exGroup.Key].tocTemp.setUserExs(exGroup.ToArray()); //agregace dat product.refreshNumbers(); //vybuduj tree return product.extractTempData(null); } }
public void setUserExs(UserEx[] userExs) { this.userExs = userExs; if (exCount==0) exCount = userExs.Length; // pro pouziti v GridCellTemplate foreach (var ex in userExs) { if (ex.isSkiped) { skipedCount++; continue; } elapsed += ex.Elapsed; if (ex.Score < 0) complPassiveCnt++; else complNotPassiveCnt++; if (ex.Score > 0) points += ex.Score; } }