Grading Boundaries Wrong in Supervisor View #98

Open
tozh4728 wants to merge 6 commits from 97-grading-boundaries-wrong-in-suervisor-view into develop
3 changed files with 213 additions and 112 deletions

View File

@ -2,156 +2,221 @@
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
<body>
<wicket:panel>
<wicket:container wicket:id="from2017">
<div wicket:id="bachelorContainer">
<div class="card mb-3 bg-light">
<div class="card-body p-2">
<p>
<strong>Omvandling från poäng till betyg för ett kandidatarbete görs enligt följande schema:</strong>
</p>
<wicket:container wicket:id="from202411">
<div wicket:id="bachelorContainer">
<div class="card mb-3 bg-light">
<div class="card-body p-2">
<p>
<strong>Conversion from points to grades is done according to the following schema:</strong>
</p>
<p>[A] 28-26, at least 1 point on components U1-U12 and Ö1-Ö4, Ö6</p>
<p>[A] 31-29</p>
<p>[B] 25-24, at least 1 point on components U1-U12 and Ö1-Ö3, Ö6</p>
<p>[B] 28-26</p>
<p>[C] 23-20, at least 1 point on components U1-U12 and Ö1-Ö3, Ö6</p>
<p>[C] 25-22</p>
<p>[D] 19-18, at least 1 point on components U1-U12 and Ö1-Ö3, Ö6</p>
<p>[D] 21-19</p>
<p>[E] 17-16, at least 1 point on components U1-U12 and Ö1-Ö3, Ö6</p>
<p>[E] 18-16</p>
<p>[Fx] at least 1 point on 8 of the components U1-U12 and at least 2 points altogether on components
Ö1-Ö3
</p>
</div>
</div>
</div>
</div>
<div wicket:id="master15Container">
<div class="card mb-3 bg-light">
<div class="card-body p-2">
<p>
<strong>Conversion from points to grades is done according to the following schema:</strong>
</p>
<div wicket:id="master15Container">
<div class="card mb-3 bg-light">
<div class="card-body p-2">
<p>
<strong>Conversion from points to grades is done according to the following schema:</strong>
</p>
<p>[A] 29-27, at least 1 point on components U1-U7, U10-U13 and Ö1-Ö4, Ö6, and at least 2 points on U8-U9</p>
<p>[A] 33-31</p>
<p>[B] 26-25, at least 1 point on components U1-U7, U10-U13 and Ö1-Ö3, Ö6, and at least 2 points on U8-U9</p>
<p>[B] 30-28</p>
<p>[C] 24-23, at least 1 point on components U1-U7, U10-U13 and Ö1-Ö3, Ö6, and at least 2 points on U8-U9</p>
<p>[C] 27-24</p>
<p>[D] 22-21, at least 1 point on components U1-U7, U10-U13 and Ö1-Ö3, Ö6, and at least 2 points on U8-U9</p>
<p>[D] 23-21</p>
<p>[E] 20-19, at least 1 point on components U1-U7, U10-U13 and Ö1-Ö3, Ö6, and at least 2 points on U8-U9</p>
<p>[E] 20-19</p>
<p>[Fx] at least 1 point on 10 of the components U1-U13 and at least 2 points altogether on components Ö1-Ö3</p>
</div>
</div>
</div>
</div>
<div wicket:id="master30Container">
<div class="card mb-3 bg-light">
<div class="card-body p-2">
<p>
<strong>Conversion from points to grades is done according to the following schema:</strong>
<span class="text-body-secondary">Updated 2017-02-20</span>
</p>
<div wicket:id="master30Container">
<div class="card mb-3 bg-light">
<div class="card-body p-2">
<p>
<strong>Conversion from points to grades is done according to the following schema:</strong>
</p>
<p>[A] 33-31, at least 1 point on components U1-U4, U10-U12, Ö1-Ö4, Ö6, and at least 2 points on U5-U9, U13</p>
<p>[A] 37-35</p>
<p>[B] 30-29, at least 1 point on components U1-U4, U10-U12, Ö1-Ö3, Ö6, and at least 2 points on U5-U9, U13</p>
<p>[B] 34-32</p>
<p>[C] 28-27, at least 1 point on components U1-U4, U10-U12, Ö1-Ö3, Ö6, and at least 2 points on U5-U9, U13</p>
<p>[C] 31-28</p>
<p>[D] 26-25, at least 1 point on components U1-U4, U10-U12, Ö1-Ö3, Ö6, and at least 2 points on U5-U9, U13</p>
<p>[D] 27-25</p>
<p>[E] 24-23, at least 1 point on components U1-U4, U10-U12, Ö1-Ö3, Ö6, and at least 2 points on U5-U9, U13</p>
<p>[E] 25-23</p>
<p>[Fx] at least 1 point on 12 of the components U1-U13 and at least 2 points altogether on components Ö1-Ö3</p>
</div>
</div>
</div>
</wicket:container>
<wicket:container wicket:id="between2017_202410">
<div wicket:id="bachelorContainer">
<div class="card mb-3 bg-light">
<div class="card-body p-2">
<p>
<strong>Omvandling från poäng till betyg för ett kandidatarbete görs enligt följande schema:</strong>
</p>
<p>[A] 28-26, at least 1 point on components U1-U12 and Ö1-Ö4, Ö6</p>
<p>[B] 25-24, at least 1 point on components U1-U12 and Ö1-Ö3, Ö6</p>
<p>[C] 23-20, at least 1 point on components U1-U12 and Ö1-Ö3, Ö6</p>
<p>[D] 19-18, at least 1 point on components U1-U12 and Ö1-Ö3, Ö6</p>
<p>[E] 17-16, at least 1 point on components U1-U12 and Ö1-Ö3, Ö6</p>
<p>[Fx] at least 1 point on 8 of the components U1-U12 and at least 2 points altogether on components
Ö1-Ö3
</p>
</div>
</div>
</div>
<div wicket:id="master15Container">
<div class="card mb-3 bg-light">
<div class="card-body p-2">
<p>
<strong>Conversion from points to grades is done according to the following schema:</strong>
</p>
<p>[A] 29-27, at least 1 point on components U1-U7, U10-U13 and Ö1-Ö4, Ö6, and at least 2 points on U8-U9</p>
<p>[B] 26-25, at least 1 point on components U1-U7, U10-U13 and Ö1-Ö3, Ö6, and at least 2 points on U8-U9</p>
<p>[C] 24-23, at least 1 point on components U1-U7, U10-U13 and Ö1-Ö3, Ö6, and at least 2 points on U8-U9</p>
<p>[D] 22-21, at least 1 point on components U1-U7, U10-U13 and Ö1-Ö3, Ö6, and at least 2 points on U8-U9</p>
<p>[E] 20-19, at least 1 point on components U1-U7, U10-U13 and Ö1-Ö3, Ö6, and at least 2 points on U8-U9</p>
<p>[Fx] at least 1 point on 10 of the components U1-U13 and at least 2 points altogether on components Ö1-Ö3</p>
</div>
</div>
</div>
<div wicket:id="master30Container">
<div class="card mb-3 bg-light">
<div class="card-body p-2">
<p>
<strong>Conversion from points to grades is done according to the following schema:</strong>
<span class="text-body-secondary">Updated 2017-02-20</span>
</p>
<p>[A] 33-31, at least 1 point on components U1-U4, U10-U12, Ö1-Ö4, Ö6, and at least 2 points on U5-U9, U13</p>
<p>[B] 30-29, at least 1 point on components U1-U4, U10-U12, Ö1-Ö3, Ö6, and at least 2 points on U5-U9, U13</p>
<p>[C] 28-27, at least 1 point on components U1-U4, U10-U12, Ö1-Ö3, Ö6, and at least 2 points on U5-U9, U13</p>
<p>[D] 26-25, at least 1 point on components U1-U4, U10-U12, Ö1-Ö3, Ö6, and at least 2 points on U5-U9, U13</p>
<p>[E] 24-23, at least 1 point on components U1-U4, U10-U12, Ö1-Ö3, Ö6, and at least 2 points on U5-U9, U13</p>
<p>[Fx] at least 1 point on 12 of the components U1-U13 and at least 2 points altogether on components Ö1-Ö3</p>
</div>
</div>
</div>
</div>
</wicket:container>
<wicket:container wicket:id="upto2016">
<div wicket:id="bachelorContainer">
<div class="card mb-3 bg-light">
<div class="card-body p-2">
<p>
<strong>
Omvandling från poäng till betyg för ett kandidatarbete görs enligt följande
schema:
</strong>
</p>
<div wicket:id="bachelorContainer">
<div class="card mb-3 bg-light">
<div class="card-body p-2">
<p>
<strong>
Omvandling från poäng till betyg för ett kandidatarbete görs enligt följande
schema:
</strong>
</p>
<p>[A] 27-25, minst 1 poäng på komponenterna U1-U12 samt Ö1-Ö4</p>
<p>[A] 27-25, minst 1 poäng på komponenterna U1-U12 samt Ö1-Ö4</p>
<p>[B] 24-23, minst 1 poäng på komponenterna U1-U12 samt Ö1-Ö3</p>
<p>[B] 24-23, minst 1 poäng på komponenterna U1-U12 samt Ö1-Ö3</p>
<p>[C] 22-19, minst 1 poäng på komponenterna U1-U12 samt Ö1-Ö3</p>
<p>[C] 22-19, minst 1 poäng på komponenterna U1-U12 samt Ö1-Ö3</p>
<p>[D] 18-17, minst 1 poäng på komponenterna U1-U12 samt Ö1-Ö3</p>
<p>[D] 18-17, minst 1 poäng på komponenterna U1-U12 samt Ö1-Ö3</p>
<p>[E] 16-15, minst 1 poäng på komponenterna U1-U12 samt Ö1-Ö3</p>
<p>[E] 16-15, minst 1 poäng på komponenterna U1-U12 samt Ö1-Ö3</p>
<p>[Fx] minst 1 poäng på åtta av komponenterna U1-U12 och minst två poäng sammanlagt på
komponenterna Ö1-Ö3
</p>
<p>[Fx] minst 1 poäng på åtta av komponenterna U1-U12 och minst två poäng sammanlagt på
komponenterna Ö1-Ö3
</p>
</div>
</div>
</div>
</div>
<div wicket:id="master15Container">
<div class="card mb-3 bg-light">
<div class="card-body p-2">
<p>
<strong>
Omvandling från poäng till betyg för ett kandidatarbete görs enligt följande
schema:
</strong>
</p>
<div wicket:id="master15Container">
<div class="card mb-3 bg-light">
<div class="card-body p-2">
<p>
<strong>
Omvandling från poäng till betyg för ett kandidatarbete görs enligt följande
schema:
</strong>
</p>
<p>[A] 28-26, minst 1 poäng på komponenterna U1-U7, U10-U13 samt Ö1-Ö4, minst 2 poäng på U8-U9</p>
<p>[A] 28-26, minst 1 poäng på komponenterna U1-U7, U10-U13 samt Ö1-Ö4, minst 2 poäng på U8-U9</p>
<p>[B] 25-24, minst 1 poäng på komponenterna U1-U7, U10-U13 samt Ö1-Ö3, minst 2 poäng på U8-U9</p>
<p>[B] 25-24, minst 1 poäng på komponenterna U1-U7, U10-U13 samt Ö1-Ö3, minst 2 poäng på U8-U9</p>
<p>[C] 23-22, minst 1 poäng på komponenterna U1-U7, U10-U13 samt Ö1-Ö3, minst 2 poäng på U8-U9</p>
<p>[C] 23-22, minst 1 poäng på komponenterna U1-U7, U10-U13 samt Ö1-Ö3, minst 2 poäng på U8-U9</p>
<p>[D] 21-20, minst 1 poäng på komponenterna U1-U7, U10-U13 samt Ö1-Ö3, minst 2 poäng på U8-U9</p>
<p>[D] 21-20, minst 1 poäng på komponenterna U1-U7, U10-U13 samt Ö1-Ö3, minst 2 poäng på U8-U9</p>
<p>[E] 19-18, minst 1 poäng på komponenterna U1-U7, U10-U13 samt Ö1-Ö3, minst 2 poäng på U8-U9</p>
<p>[E] 19-18, minst 1 poäng på komponenterna U1-U7, U10-U13 samt Ö1-Ö3, minst 2 poäng på U8-U9</p>
<p>[Fx] minst 1 poäng på tio av komponenterna U1-U13 och minst två poäng sammanlagt på komponenterna
Ö1-Ö3</p>
<p>[Fx] minst 1 poäng på tio av komponenterna U1-U13 och minst två poäng sammanlagt på komponenterna
Ö1-Ö3</p>
</div>
</div>
</div>
</div>
<div wicket:id="master30Container">
<div class="card mb-3 bg-light">
<div class="card-body p-2">
<p>
<strong>
Omvandling från poäng till betyg för ett kandidatarbete görs enligt följande
schema:
</strong>
</p>
<div wicket:id="master30Container">
<div class="card mb-3 bg-light">
<div class="card-body p-2">
<p>
<strong>
Omvandling från poäng till betyg för ett kandidatarbete görs enligt följande
schema:
</strong>
</p>
<p>[A] 32-30, minst 1 poäng på komponenterna U1-U4, U10-U12, Ö1-Ö4, minst 2 poäng på U5-U9, U13</p>
<p>[A] 32-30, minst 1 poäng på komponenterna U1-U4, U10-U12, Ö1-Ö4, minst 2 poäng på U5-U9, U13</p>
<p>[B] 29-28, minst 1 poäng på komponenterna U1-U4, U10-U12, Ö1-Ö3, minst 2 poäng på U5-U9, U13</p>
<p>[B] 29-28, minst 1 poäng på komponenterna U1-U4, U10-U12, Ö1-Ö3, minst 2 poäng på U5-U9, U13</p>
<p>[C] 27-26, minst 1 poäng på komponenterna U1-U4, U10-U12, Ö1-Ö3, minst 2 poäng på U5-U9, U13</p>
<p>[C] 27-26, minst 1 poäng på komponenterna U1-U4, U10-U12, Ö1-Ö3, minst 2 poäng på U5-U9, U13</p>
<p>[D] 25-24, minst 1 poäng på komponenterna U1-U4, U10-U12, Ö1-Ö3, minst 2 poäng på U5-U9, U13</p>
<p>[D] 25-24, minst 1 poäng på komponenterna U1-U4, U10-U12, Ö1-Ö3, minst 2 poäng på U5-U9, U13</p>
<p>[E] 23-22, minst 1 poäng på komponenterna U1-U4, U10-U12, Ö1-Ö3, minst 2 poäng på U5-U9, U13</p>
<p>[E] 23-22, minst 1 poäng på komponenterna U1-U4, U10-U12, Ö1-Ö3, minst 2 poäng på U5-U9, U13</p>
<p>[Fx] minst 1 poäng på tolv av komponenterna U1-U13 och minst två poäng sammanlagt på komponenterna
Ö1-Ö3</p>
<p>[Fx] minst 1 poäng på tolv av komponenterna U1-U13 och minst två poäng sammanlagt på komponenterna
Ö1-Ö3</p>
</div>
</div>
</div>
</div>
</wicket:container>
</wicket:panel>
</body>

View File

@ -1,5 +1,6 @@
package se.su.dsv.scipro.grading;
import java.time.LocalDate;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
@ -12,6 +13,23 @@ public class TemplatePanel extends Panel {
public static final String MASTER_15_CONTAINER = "master15Container";
public static final String MASTER_30_CONTAINER = "master30Container";
private enum GradingCategory {
UP_TO_2016,
BETWEEN_2017_202410,
FROM_202411;
public static GradingCategory fromProjectStartDate(LocalDate projectStartDate) {
int year = projectStartDate.getYear();
int month = projectStartDate.getMonthValue();
if (year < 2017) {
return UP_TO_2016;
} else {
return (year <= 2024 && month < 11) ? BETWEEN_2017_202410 : FROM_202411;
}
}
}
public TemplatePanel(String id, final IModel<Project> projectIModel) {
super(id, projectIModel);
final DegreeType degreeType = projectIModel.getObject().getProjectType().getDegreeType();
@ -20,20 +38,40 @@ public class TemplatePanel extends Panel {
@Override
protected void onConfigure() {
super.onConfigure();
setVisibilityAllowed(getYear(projectIModel.getObject()) < 2017);
setVisibilityAllowed(
GradingCategory.fromProjectStartDate(projectIModel.getObject().getStartDate()) ==
GradingCategory.UP_TO_2016
);
}
};
addTemplates(degreeType, upto16);
add(upto16);
final WebMarkupContainer from2017 = new WebMarkupContainer("from2017") {
final WebMarkupContainer between2017_202410 = new WebMarkupContainer("between2017_202410") {
@Override
protected void onConfigure() {
super.onConfigure();
setVisibilityAllowed(getYear(projectIModel.getObject()) >= 2017);
setVisibilityAllowed(
GradingCategory.fromProjectStartDate(projectIModel.getObject().getStartDate()) ==
GradingCategory.BETWEEN_2017_202410
);
}
};
addTemplates(degreeType, from2017);
add(from2017);
addTemplates(degreeType, between2017_202410);
add(between2017_202410);
final WebMarkupContainer from202411 = new WebMarkupContainer("from202411") {
@Override
protected void onConfigure() {
super.onConfigure();
setVisibilityAllowed(
GradingCategory.fromProjectStartDate(projectIModel.getObject().getStartDate()) ==
GradingCategory.FROM_202411
);
}
};
addTemplates(degreeType, from202411);
add(from202411);
}
private void addTemplates(final DegreeType degreeType, final WebMarkupContainer container) {
@ -65,8 +103,4 @@ public class TemplatePanel extends Panel {
}
);
}
private int getYear(final Project project) {
return project.getStartDate().getYear();
}
}

View File

@ -18,54 +18,56 @@ public class TemplatePanelTest extends SciProTest {
public static final ProjectType BACHELOR = new ProjectType(DegreeType.BACHELOR, "Bachelor", "Bachelor");
public static final ProjectType MASTER = new ProjectType(DegreeType.MASTER, "Master", "Master");
public static final ProjectType MAGISTER = new ProjectType(DegreeType.MAGISTER, "Magister", "Magister");
private static final String key = "between2017_202410";
private TemplatePanel panel;
@Test
public void bachelor_container_visible_if_bachelor_project() {
startPanel(BACHELOR, 15);
tester.assertVisible(path(panel, "from2017", BACHELOR_CONTAINER));
tester.assertVisible(path(panel, key, BACHELOR_CONTAINER));
}
@Test
public void bachelor_container_invisible_if_not_bachelor_project() {
startPanel(MASTER, 15);
tester.assertInvisible(path(panel, "from2017", BACHELOR_CONTAINER));
tester.assertInvisible(path(panel, key, BACHELOR_CONTAINER));
}
@Test
public void magister_container_visible_if_magister_project() {
startPanel(MAGISTER, 15);
tester.assertVisible(path(panel, "from2017", MASTER_15_CONTAINER));
tester.assertVisible(path(panel, key, MASTER_15_CONTAINER));
}
@Test
public void magister_container_invisible_if_not_magister() {
startPanel(BACHELOR, 15);
tester.assertInvisible(path(panel, "from2017", MASTER_15_CONTAINER));
tester.assertInvisible(path(panel, key, MASTER_15_CONTAINER));
}
@Test
public void magister_container_invisible_if_wrong_credits() {
startPanel(MASTER, 30);
tester.assertInvisible(path(panel, "from2017", MASTER_15_CONTAINER));
tester.assertInvisible(path(panel, key, MASTER_15_CONTAINER));
}
@Test
public void master_30_container_visible_if_master_30_project() {
startPanel(MASTER, 30);
tester.assertVisible(path(panel, "from2017", MASTER_30_CONTAINER));
tester.assertVisible(path(panel, key, MASTER_30_CONTAINER));
}
@Test
public void master_30_container_invisible_if_not_master() {
startPanel(BACHELOR, 30);
tester.assertInvisible(path(panel, "from2017", MASTER_30_CONTAINER));
tester.assertInvisible(path(panel, key, MASTER_30_CONTAINER));
}
@Test
public void master_30_container_visible_if_master_and_0_credits() {
startPanel(MASTER, 0);
tester.assertVisible(path(panel, "from2017", MASTER_30_CONTAINER));
tester.assertVisible(path(panel, key, MASTER_30_CONTAINER));
}
private void startPanel(ProjectType projectType, int credits) {