diff --git a/public/css/components/abgabetool/abgabe.css b/public/css/components/abgabetool/abgabe.css index 7c806ce2f..cd6c6cdb2 100644 --- a/public/css/components/abgabetool/abgabe.css +++ b/public/css/components/abgabetool/abgabe.css @@ -139,6 +139,94 @@ box-shadow: 0 2px 6px rgba(0,0,0,0.12); } + +/* Base Header */ +.bestanden-header { + background-color: var(--fhc-purple-70); + font-weight: 600; + border-radius: 6px; + padding: 0px 0px 0px 34px; + transition: background-color 0.3s ease, box-shadow 0.3s ease, color 0.3s ease; + box-shadow: 0 1px 2px rgba(0,0,0,0.08); +} + +/* Hover State */ +.bestanden-header:hover { + background-color: var(--fhc-purple-60); + box-shadow: 0 2px 6px rgba(0,0,0,0.12); +} + +/* Active / Expanded State */ +.p-accordion-tab-active > .bestanden-header { + background-color: var(--fhc-purple-50); + box-shadow: 0 2px 8px rgba(0,0,0,0.2); +} + +/* Hover State Active*/ +.p-accordion-tab-active > .bestanden-header:hover { + background-color: var(--fhc-purple-60); + box-shadow: 0 2px 6px rgba(0,0,0,0.12); +} + + +/* Base Header */ +.nichtbestanden-header { + background-color: var(--fhc-red-70); + font-weight: 600; + border-radius: 6px; + padding: 0px 0px 0px 34px; + transition: background-color 0.3s ease, box-shadow 0.3s ease, color 0.3s ease; + box-shadow: 0 1px 2px rgba(0,0,0,0.08); +} + +/* Hover State */ +.nichtbestanden-header:hover { + background-color: var(--fhc-red-60); + box-shadow: 0 2px 6px rgba(0,0,0,0.12); +} + +/* Active / Expanded State */ +.p-accordion-tab-active > .nichtbestanden-header { + background-color: var(--fhc-red-50); + box-shadow: 0 2px 8px rgba(0,0,0,0.2); +} + +/* Hover State Active*/ +.p-accordion-tab-active > .nichtbestanden-header:hover { + background-color: var(--fhc-red-60); + box-shadow: 0 2px 6px rgba(0,0,0,0.12); +} + + +/* Base Header */ +.erledigt-header { + background-color: var(--fhc-red-70); + font-weight: 600; + border-radius: 6px; + padding: 0px 0px 0px 34px; + transition: background-color 0.3s ease, box-shadow 0.3s ease, color 0.3s ease; + box-shadow: 0 1px 2px rgba(0,0,0,0.08); +} + +/* Hover State */ +.erledigt-header:hover { + background-color: var(--fhc-red-60); + box-shadow: 0 2px 6px rgba(0,0,0,0.12); +} + +/* Active / Expanded State */ +.p-accordion-tab-active > .erledigt-header { + background-color: var(--fhc-red-50); + box-shadow: 0 2px 8px rgba(0,0,0,0.2); +} + +/* Hover State Active*/ +.p-accordion-tab-active > .erledigt-header:hover { + background-color: var(--fhc-red-60); + box-shadow: 0 2px 6px rgba(0,0,0,0.12); +} + + /* Base Header */ .standard-header { background-color: var(--fhc-white-70); diff --git a/public/css/theme/default.css b/public/css/theme/default.css index 699a60f93..a4d197f07 100644 --- a/public/css/theme/default.css +++ b/public/css/theme/default.css @@ -101,7 +101,41 @@ --fhc-beige-10: rgba(245, 233, 215, 0.5); --fhc-beige-20: rgba(172, 153, 125, 0.5); + /* --- Purple --- */ + --fhc-purple-5: rgb(250, 245, 255); + --fhc-purple-10: rgb(240, 230, 255); + --fhc-purple-20: rgb(220, 200, 250); + --fhc-purple-30: rgb(190, 160, 245); + --fhc-purple-40: rgb(160, 120, 235); + --fhc-purple-50: rgb(130, 80, 220); + --fhc-purple-60: rgb(110, 60, 190); + --fhc-purple-70: rgb(90, 40, 160); + --fhc-purple-80: rgb(70, 25, 130); + --fhc-purple-90: rgb(50, 15, 100); + /* --- Teal --- */ + --fhc-teal-5: rgb(240, 252, 252); + --fhc-teal-10: rgb(220, 245, 245); + --fhc-teal-20: rgb(180, 235, 235); + --fhc-teal-30: rgb(130, 220, 220); + --fhc-teal-40: rgb(80, 200, 200); + --fhc-teal-50: rgb(30, 170, 170); + --fhc-teal-60: rgb(20, 140, 140); + --fhc-teal-70: rgb(15, 115, 115); + --fhc-teal-80: rgb(10, 90, 90); + --fhc-teal-90: rgb(5, 65, 65); + + /* --- Indigo --- */ + --fhc-indigo-5: rgb(245, 247, 255); + --fhc-indigo-10: rgb(230, 235, 255); + --fhc-indigo-20: rgb(200, 210, 250); + --fhc-indigo-30: rgb(160, 175, 245); + --fhc-indigo-40: rgb(120, 140, 235); + --fhc-indigo-50: rgb(80, 100, 220); + --fhc-indigo-60: rgb(60, 80, 190); + --fhc-indigo-70: rgb(45, 60, 160); + --fhc-indigo-80: rgb(30, 40, 130); + --fhc-indigo-90: rgb(20, 25, 100); } diff --git a/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js b/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js index 92f546e32..3fda6510c 100644 --- a/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js +++ b/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js @@ -308,25 +308,34 @@ export const AbgabeMitarbeiterDetail = { const abgabedatum = new Date(termin.abgabedatum) termin.diffindays = this.dateDiffInDays(termin.datum) - - if(termin.bezeichnung?.benotbar && !termin.note) return 'beurteilungerforderlich' - if (termin.abgabedatum === null && termin.upload_allowed) { - if(datum < today) { - return 'verpasst' // needs upload, missed it and has not submitted anything - } else if (datum > today && termin.diffindays <= 12) { - return 'abzugeben' // needs to upload soon - } else { - return 'standard' // upload in distant future + + const isLate = abgabedatum && abgabedatum > datum; + + // GRADE STATUS + if (termin.note) { + if (termin.note.positiv) return 'bestanden'; + return 'nichtbestanden'; + } + + // ACTION REQUIRED FOR GRADE + if (termin.bezeichnung?.benotbar && datum < today) { + return 'beurteilungerforderlich'; + } + + // SUBMISSION STATUS + if (termin.upload_allowed) { + if (abgabedatum) { + return isLate ? 'verspaetet' : 'abgegeben'; } + + // no submission yet + if (datum < today) return 'verpasst'; + if (termin.diffindays <= 12) return 'abzugeben'; + return 'standard'; } - else if(abgabedatum > datum) { - return 'verspaetet' // needs upload, missed it and has submitted smth late - } else if(!termin.upload_allowed) { - if(datum > today) return termin.diffindays <= 12 ? 'abzugeben' : 'standard' - else if (today > datum) return 'abgegeben' - } else { - return 'abgegeben' // nothing else to do for that termin - } + + // GENERIC STATUS + return datum < today ? 'verpasst' : 'standard'; }, openBeurteilungLink(link) { window.open(link, '_blank') @@ -582,6 +591,18 @@ export const AbgabeMitarbeiterDetail = { class: "custom-tooltip" } }, + getTooltipBestanden() { + return { + value: this.$p.t('abgabetool/c4tooltipBestanden'), + class: "custom-tooltip" + } + }, + getTooltipNichtBestanden() { + return { + value: this.$p.t('abgabetool/c4tooltipNichtBestanden'), + class: "custom-tooltip" + } + }, getProjektarbeitTitel() { if(this.projektarbeit?.titel) return this.projektarbeit.titel @@ -753,8 +774,11 @@ export const AbgabeMitarbeiterDetail = { - + + + +