Function Status Bar and Time Validation
This commit is contained in:
@@ -7,6 +7,8 @@ import {baseURL} from "@/components/Constants";
|
||||
import {ErrorType} from "@/components/ErrorType";
|
||||
import BasicDateCalendar from "@/components/CalendarSideBar";
|
||||
import feiertagejs from "feiertagejs";
|
||||
import PopUp from "@/components/PopUp";
|
||||
import {useRouter} from "next/router";
|
||||
|
||||
let cellHeight = 20;
|
||||
|
||||
@@ -19,6 +21,8 @@ let currentYear;
|
||||
let semesterStartYear;
|
||||
let semesterEndYear;
|
||||
let selectedElement;
|
||||
let lastEndTimeDrag;
|
||||
let lastStartTimeDrag;
|
||||
let grabbedDown;
|
||||
|
||||
let isDayOkay = [true, true, true, true, true, true]
|
||||
@@ -26,6 +30,8 @@ let isDayOkay = [true, true, true, true, true, true]
|
||||
let errorState = [ErrorType.Okay, ErrorType.Okay, ErrorType.Okay, ErrorType.Okay, ErrorType.Okay, ErrorType.Okay]
|
||||
let grayedOut = [false, false, false, false, false, false]
|
||||
|
||||
let timePlanned = 0
|
||||
|
||||
export default function CalenderView(p) {
|
||||
|
||||
const [entries, setEntries] = useState([[], [], [], [], [], []])
|
||||
@@ -38,6 +44,8 @@ export default function CalenderView(p) {
|
||||
const [endYearCalenderSideBar, setEndYearCalenderSideBar] = useState(2000)
|
||||
const [highlightMonth, setHighlightMonth] = useState(0)
|
||||
const [highlightYear, setHighlightYear] = useState(2000)
|
||||
const [popUpToggleAbgeben, setPopUpToggleAbgeben] = useState(false)
|
||||
const router = useRouter();
|
||||
|
||||
|
||||
function readEntries() {
|
||||
@@ -110,8 +118,7 @@ export default function CalenderView(p) {
|
||||
if (en[i][k] != null) {
|
||||
|
||||
|
||||
if (en[i][k].semesterid != currentsid)
|
||||
{
|
||||
if (en[i][k].semesterid != currentsid) {
|
||||
for (let l = 0; l < 20; l++) {
|
||||
if (en[i][l] != null && en[i][l].usercreatedbyid != userid) {
|
||||
if (en[i][l].timestart <= en[i][k].timestart && en[i][l].timeend >= en[i][k].timeend) {
|
||||
@@ -153,6 +160,26 @@ export default function CalenderView(p) {
|
||||
}
|
||||
|
||||
setEntries(en)
|
||||
|
||||
if(localStorage.getItem("admin") == 0)
|
||||
{
|
||||
let entriesURL = baseURL + "/entries/all/module?sessionid=" + localStorage.getItem("sessionid") + "&moduleid=" + localStorage.getItem("moduleid")
|
||||
fetch(entriesURL).then(r => r.json()).then(allEn => {
|
||||
|
||||
let moduleid = localStorage.getItem("moduleid")
|
||||
let sum = 0
|
||||
|
||||
for (let j = 0; j < allEn.length; j++) {
|
||||
if (allEn[j] != null && allEn[j].moduleid == moduleid) {
|
||||
sum += allEn[j].timeend - allEn[j].timestart
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
sum /= 3
|
||||
timePlanned = sum
|
||||
})
|
||||
}
|
||||
})
|
||||
} catch (e) {
|
||||
|
||||
@@ -228,6 +255,18 @@ export default function CalenderView(p) {
|
||||
let id = selectedElement.id;
|
||||
|
||||
if ((selectedElement.timestart - 1) / 4 >= 7 && (selectedElement.timeend - 1) / 4 <= 18) {
|
||||
|
||||
let finalTimeEnd = selectedElement.timeend
|
||||
let deltaTimeEnd = (selectedElement.timeend - lastEndTimeDrag) / 3
|
||||
if (timePlanned + deltaTimeEnd > 20) {
|
||||
finalTimeEnd -= ((timePlanned + deltaTimeEnd) - 20) * 3
|
||||
}
|
||||
let finalTimeStart = selectedElement.timestart
|
||||
let deltaTimeStart = (lastStartTimeDrag - selectedElement.timestart) / 3
|
||||
if (deltaTimeStart + timePlanned > 20) {
|
||||
finalTimeStart += (timePlanned + deltaTimeStart - 20) * 3
|
||||
}
|
||||
|
||||
let url = baseURL + "/entries?sessionid=" + localStorage.getItem("sessionid");
|
||||
let json = {
|
||||
"id": id,
|
||||
@@ -235,8 +274,8 @@ export default function CalenderView(p) {
|
||||
"yearnumber": 0,
|
||||
"semesterid": 0,
|
||||
"usercreatedbyid": 0,
|
||||
"timestart": selectedElement.timestart,
|
||||
"timeend": selectedElement.timeend,
|
||||
"timestart": finalTimeStart,
|
||||
"timeend": finalTimeEnd,
|
||||
"info": "",
|
||||
"moduleid": localStorage.getItem("moduleid")
|
||||
}
|
||||
@@ -316,7 +355,7 @@ export default function CalenderView(p) {
|
||||
if (!currentId.includes("grab")) {
|
||||
if (!checkForElementAtRow(row + 2, currentColumnID) && !checkForElementAtRow(row + 1, currentColumnID)) {
|
||||
if ((row - 1) / 4 >= 7 && (row + 2) / 4 <= 18) {
|
||||
if (!grayedOut[currentColumnID]) {
|
||||
if (!grayedOut[currentColumnID] && timePlanned + 0.8 < 20) {
|
||||
pushEntry(currentColumnID, row)
|
||||
}
|
||||
}
|
||||
@@ -326,6 +365,8 @@ export default function CalenderView(p) {
|
||||
if (currentUserID == getElementInColumn(parentID, currentColumnID).usercreatedbyid && getElementInColumn(parentID, currentColumnID).moduleid == localStorage.getItem("moduleid")) {
|
||||
grabbedDown = currentId.includes("down")
|
||||
selectedElement = getElementInColumn(parentID, currentColumnID);
|
||||
lastEndTimeDrag = selectedElement.timeend
|
||||
lastStartTimeDrag = selectedElement.timestart
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -366,19 +407,25 @@ export default function CalenderView(p) {
|
||||
}
|
||||
|
||||
function getEntryColor(userCreatedByID, columnID, semesterid, moduleid) {
|
||||
console.log(moduleid)
|
||||
let id = localStorage.getItem("userid");
|
||||
let currentsid = localStorage.getItem("currentsid")
|
||||
if (id == userCreatedByID) {
|
||||
if (isDayOkay[columnID] && moduleid == localStorage.getItem("moduleid")) {
|
||||
return "#77932b";
|
||||
} else if (moduleid != localStorage.getItem("moduleid")) {
|
||||
return "#346991";
|
||||
} else {
|
||||
return "#e5a10e";
|
||||
}
|
||||
if(localStorage.getItem("admin") == 0)
|
||||
{
|
||||
if (id == userCreatedByID) {
|
||||
if (isDayOkay[columnID] && moduleid == localStorage.getItem("moduleid")) {
|
||||
return "#77932b";
|
||||
} else if (moduleid != localStorage.getItem("moduleid")) {
|
||||
return "#346991";
|
||||
} else {
|
||||
return "#e5a10e";
|
||||
}
|
||||
|
||||
} else {
|
||||
} else {
|
||||
return "#a2a2a2";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return "#a2a2a2";
|
||||
}
|
||||
}
|
||||
@@ -386,74 +433,83 @@ export default function CalenderView(p) {
|
||||
function getResizeBarColor(userCreatedByID, columnID, semesterid, moduleid) {
|
||||
let id = localStorage.getItem("userid");
|
||||
let currentsid = localStorage.getItem("currentsid")
|
||||
if (id == userCreatedByID) {
|
||||
if (isDayOkay[columnID] && moduleid == localStorage.getItem("moduleid")) {
|
||||
return "#5a6c20";
|
||||
} else if (moduleid != localStorage.getItem("moduleid")) {
|
||||
return "#346991"
|
||||
if(localStorage.getItem("admin") == 0)
|
||||
{
|
||||
if (id == userCreatedByID) {
|
||||
if (isDayOkay[columnID] && moduleid == localStorage.getItem("moduleid")) {
|
||||
return "#5a6c20";
|
||||
} else if (moduleid != localStorage.getItem("moduleid")) {
|
||||
return "#346991"
|
||||
} else {
|
||||
return "#c08809";
|
||||
}
|
||||
} else {
|
||||
return "#c08809";
|
||||
return "#a2a2a2";
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
return "#a2a2a2";
|
||||
}
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
semesterStart = 0;
|
||||
semesterEnd = 0;
|
||||
semesterStartYear = 0;
|
||||
semesterEndYear = 0;
|
||||
currentWeekStartDay = 0;
|
||||
currentYear = 2000;
|
||||
selectedElement = null;
|
||||
grabbedDown = false;
|
||||
errorState = [ErrorType.Okay, ErrorType.Okay, ErrorType.Okay, ErrorType.Okay, ErrorType.Okay, ErrorType.Okay]
|
||||
setTimeout(() => {
|
||||
semesterStart = 0;
|
||||
semesterEnd = 0;
|
||||
semesterStartYear = 0;
|
||||
semesterEndYear = 0;
|
||||
currentWeekStartDay = 0;
|
||||
currentYear = 2000;
|
||||
selectedElement = null;
|
||||
grabbedDown = false;
|
||||
errorState = [ErrorType.Okay, ErrorType.Okay, ErrorType.Okay, ErrorType.Okay, ErrorType.Okay, ErrorType.Okay]
|
||||
|
||||
let url = baseURL + "/semester/id?sessionid=" + localStorage.getItem("sessionid") +
|
||||
"&id=" + localStorage.getItem("currentsid");
|
||||
let url = baseURL + "/semester/id?sessionid=" + localStorage.getItem("sessionid") +
|
||||
"&id=" + localStorage.getItem("currentsid");
|
||||
|
||||
|
||||
fetch(url).then(r => r.json()).then(s => {
|
||||
currentWeekStartDay = s.startday - new Date(s.startyear, 0, s.startday).getUTCDay();
|
||||
currentYear = s.startyear;
|
||||
setStartYearCalenderSideBar(currentYear)
|
||||
setEndYearCalenderSideBar(s.endyear)
|
||||
setHighlightMonth(new Date(s.startyear, 0, s.startday).getMonth())
|
||||
setHighlightYear(currentYear)
|
||||
fetch(url).then(r => r.json()).then(s => {
|
||||
currentWeekStartDay = s.startday - new Date(s.startyear, 0, s.startday).getUTCDay();
|
||||
currentYear = s.startyear;
|
||||
setStartYearCalenderSideBar(currentYear)
|
||||
setEndYearCalenderSideBar(s.endyear)
|
||||
setHighlightMonth(new Date(s.startyear, 0, s.startday).getMonth())
|
||||
setHighlightYear(currentYear)
|
||||
|
||||
semesterStart = s.startday;
|
||||
semesterEnd = s.endday;
|
||||
semesterStartYear = s.startyear;
|
||||
semesterEndYear = s.endyear;
|
||||
setStartDayCalenderSideBar(semesterStart)
|
||||
setEndDayCalenderSideBar(s.endday)
|
||||
semesterStart = s.startday;
|
||||
semesterEnd = s.endday;
|
||||
semesterStartYear = s.startyear;
|
||||
semesterEndYear = s.endyear;
|
||||
setStartDayCalenderSideBar(semesterStart)
|
||||
setEndDayCalenderSideBar(s.endday)
|
||||
|
||||
}).then(readEntries)
|
||||
}).then(readEntries)
|
||||
|
||||
scrollRef.current.scrollTop = 600;
|
||||
window.addEventListener("contextmenu", (e) => (e.preventDefault()))
|
||||
scrollRef.current.scrollTop = 600;
|
||||
window.addEventListener("contextmenu", (e) => (e.preventDefault()))
|
||||
|
||||
window.addEventListener("keypress", (e) => {
|
||||
try {
|
||||
if (e.key === "+") {
|
||||
cellHeight += 2
|
||||
} else if (e.key === "-") {
|
||||
if (cellHeight - 2 >= 8) {
|
||||
cellHeight -= 2
|
||||
window.addEventListener("keypress", (e) => {
|
||||
try {
|
||||
if (e.key === "+") {
|
||||
cellHeight += 2
|
||||
} else if (e.key === "-") {
|
||||
if (cellHeight - 2 >= 8) {
|
||||
cellHeight -= 2
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
setInterval(function () {
|
||||
if (selectedElement == null) {
|
||||
readEntries()
|
||||
}
|
||||
}, 500);
|
||||
setInterval(function () {
|
||||
if (selectedElement == null) {
|
||||
readEntries()
|
||||
}
|
||||
}, 500);
|
||||
}, 100)
|
||||
}, [])
|
||||
|
||||
|
||||
@@ -498,6 +554,19 @@ export default function CalenderView(p) {
|
||||
justifyContent: "center",
|
||||
alignItems: "center"
|
||||
}}>
|
||||
<PopUp displayState={popUpToggleAbgeben ? "block" : "none"} hint={"Willst du wirklich abgeben?"}
|
||||
text1={"Abbrechen"} text2={"Abgeben"}
|
||||
function1={() => {
|
||||
setPopUpToggleAbgeben(false)
|
||||
}}
|
||||
function2={() => {
|
||||
fetch(baseURL + "/module/submit?sessionid=" + localStorage.getItem("sessionid") + "&id=" + localStorage.getItem("moduleid"), {
|
||||
method: "PUT"
|
||||
}).then(() => router.push("/semesteroverviewLecturer"))
|
||||
}}
|
||||
/>
|
||||
|
||||
|
||||
<p style={{
|
||||
fontSize: 40,
|
||||
marginBottom: 60
|
||||
@@ -837,6 +906,24 @@ export default function CalenderView(p) {
|
||||
</div>))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p style={{
|
||||
display: typeof window !== "undefined" && localStorage.getItem("admin") == 0 ? "block" : "none",
|
||||
marginTop: 10,
|
||||
fontSize: 20
|
||||
}}>{Math.floor(timePlanned)}h {(Math.floor(timePlanned * 3) - Math.floor(Math.floor(timePlanned) * 3)) * 15} min
|
||||
// 20h</p>
|
||||
|
||||
<div style={{
|
||||
display: typeof window !== "undefined" && localStorage.getItem("admin") == 0 ? "block" : "none",
|
||||
position: "absolute",
|
||||
right: 70,
|
||||
bottom: 20,
|
||||
}}>
|
||||
<Button color={timePlanned < 20 ? "#AAAAAA": "#77932b"} onClick={() => {
|
||||
Math.floor(timePlanned) == 20 ? setPopUpToggleAbgeben(true) : {}
|
||||
}} text={"Abgeben"} width={100} height={40}/>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user