Skip to content

Commit

Permalink
Merge pull request #113 from correctexam/develop
Browse files Browse the repository at this point in the history
update calcul and assignement
  • Loading branch information
barais authored Dec 24, 2023
2 parents 0f8cc43 + f7b5bbf commit 2b8b64a
Show file tree
Hide file tree
Showing 10 changed files with 503 additions and 257 deletions.
16 changes: 14 additions & 2 deletions src/main/java/fr/istic/domain/ExamSheet.java
Original file line number Diff line number Diff line change
Expand Up @@ -115,20 +115,31 @@ public static PanacheQuery<ExamSheet> findExamSheetByName( String name) {
return find("select e from ExamSheet e where e.name =?1", name);
}

public static PanacheQuery<ExamSheet> findExamSheetByScanAndPageminAndPagemax(Long scanId, Integer pagemin,
Integer pagemax) {
return find("select e from ExamSheet e where e.scan.id =?1 and e.pagemin = ?2 and e.pagemax = ?3", scanId,pagemin,pagemax);
}


public static PanacheQuery<ExamSheet> findExamSheetByScan( long scanId) {
return find("select e from ExamSheet e where e.scan.id =?1", scanId);
}

public static PanacheQuery<ExamSheet> findExamSheetByScanWithoutMinusOne( long scanId) {
return find("select e from ExamSheet e where e.scan.id =?1 and e.pagemin <> -1 and e.pagemax <> -1", scanId);
}


public static PanacheQuery<ExamSheet> findExamSheetByScanAndStudentId( long scanId, long studentId) {
return find("select e from ExamSheet e join e.students as st where e.scan.id =?1 and st.id = ?2", scanId, studentId);
}

public static PanacheQuery<ExamSheet> canAccess(long courseGroupId, String login) {
return find("select ex from ExamSheet ex join ex.students as s join s.groups as g join g.course.profs as u where ex.id =?1 and u.login =?2", courseGroupId, login);
return find("select ex from Exam ex join ex.scanfile as s join s.sheets as sh join ex.course.profs as u where sh.id =?1 and u.login =?2", courseGroupId, login);
}

public static PanacheQuery<ExamSheet> getAll4ExamId( long examId) {
return find("select distinct ex from Exam as e join e.scanfile.sheets as ex where e.id = ?1 and ex.pagemin <> -1 and ex.pagemax <> -1 and ex.students IS NOT EMPTY" ,examId);
return find("select distinct ex from Exam as e join e.scanfile.sheets as ex where e.id = ?1 and ex.pagemin <> -1 and ex.pagemax <> -1" ,examId);
}

public static PanacheQuery<ExamSheet> getAll4ExamIdEvenOrphan( long examId) {
Expand Down Expand Up @@ -158,4 +169,5 @@ public void cleanBeforDelete(){
e.update();
});
}

}
4 changes: 4 additions & 0 deletions src/main/java/fr/istic/domain/Student.java
Original file line number Diff line number Diff line change
Expand Up @@ -163,5 +163,9 @@ public static PanacheQuery<Student> canAccess(long studentId, String login) {
return find("select s from Student s join s.groups as c join c.course.profs as u where s.id =?1 and u.login =?2", studentId, login);
}

public static PanacheQuery<Student> findStudentsbyIds(List<Long> studentsId) {
return find("select s from Student s where s.id in (?1)", studentsId);
}


}
5 changes: 3 additions & 2 deletions src/main/java/fr/istic/domain/StudentResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -228,8 +228,9 @@ public static PanacheQuery<StudentResponse> findStudentResponsesbysheetId( long
return find("select sr from StudentResponse sr where sr.sheet.id =?1 ", sheetId );
}

// and sr.sheet.students IS NOT EMPTY
public static PanacheQuery<StudentResponse> getAll4ExamId( long examId) {
return find("select sr from StudentResponse sr where sr.question.exam.id = ?1 and sr.sheet.pagemin <> -1 and sr.sheet.pagemax <> -1 and sr.sheet.students IS NOT EMPTY",examId);
return find("select sr from StudentResponse sr where sr.question.exam.id = ?1 and sr.sheet.pagemin <> -1 and sr.sheet.pagemax <> -1",examId);
}

public static PanacheQuery<StudentResponse> getAll4ExamIdEvenOrphan( long examId) {
Expand Down Expand Up @@ -306,7 +307,7 @@ public static PanacheQuery<StudentResponse> getAllStudentResponseWithexamId(long


public static PanacheQuery<StudentResponse> getAllStudentResponseWithexamIdWithOrphanId(long examId) {
return find("select distinct sr from StudentResponse sr join fetch sr.sheet as sheet join fetch sr.question as q join fetch q.zone join fetch sheet.students left join fetch sr.textcomments tc left join fetch sr.gradedcomments gc where sr.question.exam.id = ?1",examId);
return find("select distinct sr from StudentResponse sr join fetch sr.sheet as sheet join fetch sr.question as q join fetch q.zone left join fetch sheet.students left join fetch sr.textcomments tc left join fetch sr.gradedcomments gc where sr.question.exam.id = ?1",examId);
}


Expand Down
87 changes: 87 additions & 0 deletions src/main/java/fr/istic/service/ExamSheetService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import io.quarkus.panache.common.Page;
import fr.istic.domain.ExamSheet;
import fr.istic.domain.Student;
import fr.istic.service.dto.ExamSheetDTO;
import fr.istic.service.mapper.ExamSheetMapper;
import org.slf4j.Logger;
Expand All @@ -11,7 +12,11 @@
import javax.inject.Inject;
import javax.transaction.Transactional;

import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collector;
import java.util.stream.Collectors;

@ApplicationScoped
@Transactional
Expand Down Expand Up @@ -77,5 +82,87 @@ public Paged<ExamSheetDTO> findExamSheetByName(Page page, String name) {
.map(examSheet -> examSheetMapper.toDto((ExamSheet) examSheet));
}

public Paged<ExamSheetDTO> findOrCreateExamSheetByPageMinAndPageMax(Page page, Long scanId, Integer pagemin,
Integer pagemax) throws Exception {
long p = ExamSheet.findExamSheetByScanAndPageminAndPagemax(scanId,pagemin,pagemax).count();
if (p==0){
ExamSheetDTO dto = new ExamSheetDTO();
dto.scanId = scanId;
dto.pagemin = pagemin;
dto.pagemax = pagemax;
dto.name = UUID.randomUUID().toString();
this.persistOrUpdate(dto);
}
return new Paged<>(ExamSheet.findExamSheetByScanAndPageminAndPagemax(scanId,pagemin,pagemax).page(page))
.map(examSheet -> examSheetMapper.toDto((ExamSheet) examSheet));
}



public Paged<ExamSheetDTO> findOrCreateExamSheetByName(Page page, Long scanId, Integer pageInTemplate,
Integer pageInScan) throws Exception {


long nbrpage = ExamSheet.findExamSheetByScanWithoutMinusOne(scanId).count();


if (nbrpage == pageInScan/pageInTemplate){
return new Paged<>(ExamSheet.findExamSheetByScan(scanId).page(page))
.map(examSheet -> examSheetMapper.toDto((ExamSheet) examSheet));
} else {
for (int i = 0; i< pageInScan/pageInTemplate ;i++){
long p = ExamSheet.findExamSheetByScanAndPageminAndPagemax(scanId,i*pageInTemplate,i*pageInTemplate + (pageInTemplate-1)).count();
if (p==0){
ExamSheetDTO dto = new ExamSheetDTO();
dto.scanId = scanId;
dto.pagemin = i*pageInTemplate;
dto.pagemax = i*pageInTemplate + (pageInTemplate-1);
dto.name = UUID.randomUUID().toString();
this.persistOrUpdate(dto);
}
}
nbrpage = ExamSheet.findExamSheetByScanWithoutMinusOne(scanId).count();
if (nbrpage == pageInScan/pageInTemplate){
return new Paged<>(ExamSheet.findExamSheetByScan(scanId).page(page))
.map(examSheet -> examSheetMapper.toDto((ExamSheet) examSheet));
} else {
throw (new Exception("Even in trying to create ExamSheets, I got a strange behavior"));
}
}
}

public ExamSheetDTO updateStudent(Long id, List<Long> studentsId) throws Exception {

ExamSheet exO = ExamSheet.findById(id);
if (exO == null){
throw new Exception("no update student");
} else {
List<Student> sts = Student.findStudentsbySheetId(id).list();
List<Student> sts1 = sts.stream().filter(st -> !studentsId.contains(st.id)).collect(Collectors.toList());
for (Student s : sts1){
s.examSheets.remove(exO);
Student.persistOrUpdate(s);
}

List<Student> stsToUpdate = Student.findStudentsbyIds(studentsId).list();


for (Student s : stsToUpdate){
List<ExamSheet> sheetsToRemove = s.examSheets.stream().filter(st -> st.scan.id ==exO.scan.id && st.id!= exO.id).collect(Collectors.toList());
sheetsToRemove.forEach(st-> {
s.examSheets.remove(st);
Student.persistOrUpdate(s);
});
if (s.examSheets.stream().allMatch(ex -> ex.id != id)){
s.examSheets.add(exO);
exO.students.add(s);
Student.persistOrUpdate(s);
}
}
return this.examSheetMapper.toDto(exO);
}

}


}
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,11 @@ public HybridGradedCommentDTO persistOrUpdate(HybridGradedCommentDTO hybridGrade
var absoluteNote2Add = 0.0;
double pourcentage = 0.0;
if (st.question != null && st.question.defaultpoint != null){
pourcentage = st.question.defaultpoint.doubleValue()/4;
pourcentage = st.question.defaultpoint.doubleValue() *4;

}
for (Answer2HybridGradedComment an2 : ans2){
var stepValue = an.stepValue !=null ? an2.stepValue.doubleValue(): 0.0;
var stepValue = an2.stepValue !=null ? an2.stepValue.doubleValue(): 0.0;
if (stepValue > 0) {
var relative = an2.hybridcomments.relative != null ? an2.hybridcomments.relative : false;
var step = an2.hybridcomments.step != null ? an2.hybridcomments.step.doubleValue() : 1.0;
Expand Down
24 changes: 16 additions & 8 deletions src/main/java/fr/istic/service/ImportExportService.java
Original file line number Diff line number Diff line change
Expand Up @@ -739,13 +739,13 @@ public JsonObject export(long courseId, boolean includeStudentData, long eid) {
});
});

JsonArray studentIdUidMappings = new JsonArray();
root.add("studentIdUidMappings", studentIdUidMappings);
studentsUID.entrySet().forEach(sid -> {
JsonArray sheetIdUidMappings = new JsonArray();
root.add("sheetIdUidMappings", sheetIdUidMappings);
examSheetsUID.entrySet().forEach(sid -> {
JsonObject ob = new JsonObject();
ob.addProperty("left", sid.getKey());
ob.addProperty("right", sid.getValue().toString());
studentIdUidMappings.add(ob);
sheetIdUidMappings.add(ob);
});
}

Expand Down Expand Up @@ -779,7 +779,8 @@ private void createZone(Zone zone, Map<Long, UUID> zonesUID, JsonArray zones,

public Course importCourse(JsonObject _course, User user, boolean includeStudentData) {
Map<Long, String> importexamsUID = new HashMap<>();
Map<Long, String> importstudentsUID = new HashMap<>();
//Map<Long, String> _importstudentsUID = new HashMap<>();
Map<Long, String> importsheetUID = new HashMap<>();
Map<String, Long> uuidId = new HashMap<>();


Expand All @@ -789,12 +790,19 @@ public Course importCourse(JsonObject _course, User user, boolean includeStudent
});

if (includeStudentData) {
if (_course.getAsJsonArray("studentIdUidMappings") != null) {
/* if (_course.getAsJsonArray("studentIdUidMappings") != null) {
_course.getAsJsonArray("studentIdUidMappings").forEach(st -> {
importstudentsUID.put(st.getAsJsonObject().get("left").getAsLong(),
st.getAsJsonObject().get("right").getAsString());
});
}*/
if (_course.getAsJsonArray("sheetIdUidMappings") != null) {

_course.getAsJsonArray("sheetIdUidMappings").forEach(st -> {
importsheetUID.put(st.getAsJsonObject().get("left").getAsLong(),
st.getAsJsonObject().get("right").getAsString());
});
}

}
Expand Down Expand Up @@ -1138,7 +1146,7 @@ public Course importCourse(JsonObject _course, User user, boolean includeStudent
StringTokenizer t = new StringTokenizer(comment.zonegeneratedid, "_");
if (t.countTokens() > 1) {
String examId = t.nextToken();
String studentId = t.nextToken();
String sheetId = t.nextToken();
String questiono = t.nextToken();
String index = t.nextToken();
/*
Expand All @@ -1147,7 +1155,7 @@ public Course importCourse(JsonObject _course, User user, boolean includeStudent
*
*/
comment.zonegeneratedid = "" + uuidId.get(importexamsUID.get(Long.parseLong(examId))) + "_" +
uuidId.get(importstudentsUID.get(Long.parseLong(studentId))) + "_" + questiono + "_"
uuidId.get(importsheetUID.get(Long.parseLong(sheetId))) + "_" + questiono + "_"
+ index;
}

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/fr/istic/service/QuestionService.java
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public QuestionDTO persistOrUpdate(QuestionDTO questionDTO) {
var absoluteNote2Add = 0.0;
double pourcentage = 0.0;
if (question != null && question.defaultpoint != null){
pourcentage = question.defaultpoint.doubleValue();
pourcentage = question.defaultpoint.doubleValue() *4;
}

for( Answer2HybridGradedComment an2 : st.hybridcommentsValues){
Expand Down
9 changes: 8 additions & 1 deletion src/main/java/fr/istic/web/rest/ExamResource.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,10 @@
import javax.ws.rs.core.*;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

/**
Expand Down Expand Up @@ -145,14 +147,19 @@ public Response deleteStudentSheet(@PathParam("id") Long id, @Context SecurityCo
Optional<Exam> ex = Exam.findByIdOptional(id);
if (ex.isPresent()){
List<Student> st = Student.findStudentsbyCourseId(ex.get().course.id).list();
Set<ExamSheet> toRemoveS = new HashSet<>();
for (Student student : st){
List<ExamSheet> toRemove = student.examSheets.stream().filter(es -> es.scan.id == ex.get().scanfile.id).collect(Collectors.toList());
toRemoveS.addAll(toRemove);
student.examSheets.removeIf(es -> es.scan.id == ex.get().scanfile.id);
Student.update(student);
for (ExamSheet toRemove1: toRemove){
}
for (ExamSheet toRemove1: toRemoveS){
if (StudentResponse.findStudentResponsesbysheetId(toRemove1.id).count() ==0){
toRemove1.delete();
}
}

}
var response = Response.noContent();
HeaderUtil.createEntityDeletionAlert(applicationName, true, "examSheet", "-1")
Expand Down
Loading

0 comments on commit 2b8b64a

Please sign in to comment.