static IEnumerable<object[]> exportStudyDetails(exporter e) { //hotova cviceni, ktera nepotrebuji human evaluaci: long exFlag = (long)(CourseModel.CourseDataFlag.ex | CourseModel.CourseDataFlag.done); long wrongFlag = (long)CourseModel.CourseDataFlag.needsEval; var query = e.db.CourseDatas. Where(cd => cd.CourseUser.CompanyId == e.companyId && (cd.Flags & exFlag) == exFlag && (cd.Flags & wrongFlag) == 0); //filtr pouze na skupinu studentu studijni grupy if (e.groupId >= 0) { var grp = e.data.studyGroups.First(g => g.groupId == e.groupId); var lmcomIds = e.courseUsers.Keys.Select(u => u.lmcomId).ToArray(); query = query.Where(cd => lmcomIds.Contains(cd.CourseUser.LMComId)); } //vyber raw data z databaze var query2 = query. Select(cd => new { cd.Key, cd.ShortData, cd.CourseUser.ProductUrl, cd.CourseUser.LMComId }). ToArray(); //zpracovani raw dat var allExercises = query2. Select(kd => { var res = JsonConvert.DeserializeObject<uEx>(kd.ShortData); res.url = kd.Key; res.productUrl = kd.ProductUrl; res.lmcomId = kd.LMComId; return res; }). ToArray(); //merge user data s product sitemap var umodulesObj = new blendedMeta.uDoneModules(); foreach (var uex in allExercises) blendedMeta.MetaInfo.addEx(umodulesObj, uex); //zatrideni existujicich dat var umodules = umodulesObj.umodules.Values.ToArray(); return lib.emptyAndHeader(umodules).Select(t => { IAlocatedKey usr = null; if (t != null) { if (t.module.level == null) return null; //pretest modul nema level e.courseUsers.TryGetValue(new lineUser(t.module.product.line, t.lmcomId), out usr); if (usr == null) return null; } IAlocatedKey lector = usr == null ? null : e.allUsers[usr._myLectorLmcomId]; int lev = t == null ? 0 : (t.module is pretestItem ? ((pretestItem)t.module).lev : t.module.level.lev); return new object[] { t==null ? "_student" : usr.lastName + " " + usr.firstName, t==null ? "_studyGroup" : usr._myGroup.title + " (učitel " + lector.firstName + " " + lector.lastName + ")", t==null ? "_course" : exporter.lineToText(t.module.product.line), t==null ? "_level" : e.levelToText(lev), t==null ? (object)"_exerciseCount" : t.exCount, t==null ? (object)"_exerciseSum" : t.module.level.exCount, t==null ? "_lesson" : t.module.order + t.module.data.title, t==null ? (object)"_maxScore" : t.ms,//new lib.formatedValue(Math.Round(t.ms==0 ? -1 : (decimal)t.s / t.ms, 2), lib.cellFormat.percent), t==null ? (object)"_score" : t.s, t==null ? (Object)"_elapsed" : new lib.formatedValue((double)t.elapsed / secPerDay, lib.cellFormat.time), t==null ? (Object)"_recording" : new lib.formatedValue((double)t.sRec / secPerDay, lib.cellFormat.time), t==null ? (Object)"_playRecording" : new lib.formatedValue((double)t.sPRec / secPerDay, lib.cellFormat.time), t==null ? (Object)"_play" : new lib.formatedValue((double)t.sPlay / secPerDay, lib.cellFormat.time), }; }); }
public static byte[] run(int companyId, int groupId) { using (var xlsx = new xlsxFile(HttpContext.Current.Server.MapPath("~/blendedapi/vyzva/server/excels/studyall.xlsx"))) { var e = new exporter(companyId, groupId); var ws = lib.prepareSheet2(xlsx.package, "studyblocks", 0); var rng = lib.import(ws, exportStudyBlocks(e), 0, 0); ws.Names.Add("studyblocks", rng); ws = lib.prepareSheet2(xlsx.package, "studydetails", 0); rng = lib.import(ws, exportStudyDetails(e), 0, 0); ws.Names.Add("studydetails", rng); return xlsx.result; } }
static IEnumerable<object[]> exportStudyBlocks(exporter e) { //nacti z CourseData pretesty, hotove lekce nebo vyhodnocene testy: long validTypes = (long)(CourseModel.CourseDataFlag.blLesson | CourseModel.CourseDataFlag.blTest | CourseModel.CourseDataFlag.blPretest); var query = e.db.CourseDatas. Where(cd => cd.CourseUser.CompanyId == e.companyId && (cd.Flags & (long)CourseModel.CourseDataFlag.done) != 0 && //musi byt done (cd.Flags & validTypes) != 0 && //pretest, lekce nebo test (cd.Flags & (long)CourseModel.CourseDataFlag.needsEval) == 0); //jsou vyhodnocene //filtr pouze na skupinu studentu studijni grupy if (e.groupId >= 0) { var grp = e.data.studyGroups.First(g => g.groupId == e.groupId); var lmcomIds = e.courseUsers.Keys.Select(u => u.lmcomId).ToArray(); query = query.Where(cd => lmcomIds.Contains(cd.CourseUser.LMComId)); } //vyber raw data z databaze var query2 = query. Select(cd => new { cd.Key, cd.ShortData, cd.CourseUser.ProductUrl, cd.CourseUser.LMComId }). ToArray(); //zpracovani raw dat var allModules = query2. Select(kd => { var res = JsonConvert.DeserializeObject<userBase>(kd.ShortData); res.url = kd.Key; res.productUrl = kd.ProductUrl; res.lmcomId = kd.LMComId; return res; }). ToArray(); //zapracovani user dat do struktury kurzu var userProducts = new blendedMeta.uProducts(); foreach (var module in allModules) blendedMeta.MetaInfo.addModule(userProducts, module); //zatrideni existujicich dat foreach (var lmcId in e.courseUsers.Keys) blendedMeta.MetaInfo.addDummyUsers(userProducts, lmcId); //doplneni studentu, co jeste nedokoncili nic z kurzu (tj. nemaji zadna DONE data v DB) return lib.emptyAndHeader(userProducts.uproducts.Select(kv => new { kv.Key, kv.Value })).Select(t => { IAlocatedKey usr = null; if (t != null) { e.courseUsers.TryGetValue(t.Key, out usr); if (usr == null) return null; } IAlocatedKey lector = usr == null ? null : e.allUsers[usr._myLectorLmcomId]; return new object[] { t==null ? "_student" : usr.lastName + " " + usr.firstName, t==null ? "_studyGroup" : usr._myGroup.title + " (učitel " + lector.firstName + " " + lector.lastName + ")", t==null ? "_course" : exporter.lineToText(t.Value.product.line), t==null ? "_learnphase" : t.Value.etapId(), }; }); }