Created
October 26, 2025 09:26
-
-
Save geokal/3bf294e134776d05cfec02f7f29b3e12 to your computer and use it in GitHub Desktop.
Blazor MainLayout Sections (Anchored Merge Version)
This file has been truncated, but you can view the full file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!-- REGION: Company.Start --> | |
| @if (!isInitializedAsCompanyUser) | |
| { | |
| <div class="professional-loading"> | |
| <div class="loading-content"> | |
| <div class="loading-spinner"> | |
| <div class="spinner-circle"></div> | |
| <div class="spinner-circle"></div> | |
| <div class="spinner-circle"></div> | |
| </div> | |
| <div class="loading-text"> | |
| <span class="loading-title">Φορτώνει, Παρακαλώ Περιμένετε...</span> | |
| <span class="loading-subtitle">Γίνεται προετοιμασία του περιεχομένου</span> | |
| </div> | |
| </div> | |
| <div class="loading-progress"> | |
| <div class="progress-bar"> | |
| <div class="progress-fill"></div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| else if (!isCompanyRegistered) | |
| { | |
| <div style="display: flex; justify-content: flex-start; padding: 20px; flex-direction: column;"> | |
| <div style="width: 300px; border: none; border-radius: 12px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); transition: transform 0.3s ease, box-shadow 0.3s ease; background: linear-gradient(135deg, #f9f9f9, #e0e0e0);"> | |
| <div style="padding: 20px; text-align: center;"> | |
| <h5 style="font-size: 1.5rem; font-weight: bold; color: #333; margin-bottom: 20px;">Προφίλ Εταιρείας</h5> | |
| <a style="background-color: #007bff; border: none; border-radius: 25px; padding: 10px 20px; font-size: 1rem; color: white; text-decoration: none; transition: background-color 0.3s ease, transform 0.2s ease;" href="companyRegistration" onmouseover="this.style.backgroundColor='#0056b3'; this.style.transform='scale(1.05)'" onmouseout="this.style.backgroundColor='#007bff'; this.style.transform='scale(1)'">Εγγραφή</a> | |
| </div> | |
| </div> | |
| <p style="font-size: 0.9rem; color: #000; margin-top: 7px; text-align: center; font-weight: bold;"> | |
| <span style="color: #ff0000;">**</span> <span style="color: #ff0000;">Προσοχή</span>: Για εμφάνιση του περιεχομένου της σελίδας είναι <span style="color: #ff0000;">Υποχρεωτική</span> η Εγγραφή σας | |
| </p> | |
| </div> | |
| } | |
| else | |
| { | |
| <div class="content-area position-relative"> | |
| <div class="table-bordered position-relative"> | |
| <!-- Tabs navigation --> | |
| <ul class="nav nav-tabs" id="myTab" role="tablist"> | |
| <li class="nav-item position-relative" role="presentation"> | |
| <button class="nav-link fade show active" id="announcements-tab" data-bs-toggle="tab" data-bs-target="#announcements" type="button" role="tab" aria-controls="announcements" aria-selected="true">Ανακοινώσεις</button> | |
| </li> | |
| <li class="nav-item position-relative" role="presentation"> | |
| <button class="nav-link" id="events-tab" data-bs-toggle="tab" data-bs-target="#events" type="button" role="tab" aria-controls="events" aria-selected="false">Εκδηλώσεις</button> | |
| </li> | |
| <li class="nav-item position-relative" role="presentation"> | |
| <button class="nav-link" id="jobs-tab" data-bs-toggle="tab" data-bs-target="#jobs" type="button" role="tab" aria-controls="jobs" aria-selected="false">Θέσεις Εργασίας</button> | |
| </li> | |
| <li class="nav-item position-relative" role="presentation"> | |
| <button class="nav-link" id="internships-tab" data-bs-toggle="tab" data-bs-target="#internships" type="button" role="tab" aria-controls="internships" aria-selected="false">Θέσεις Πρακτικής Άσκησης</button> | |
| </li> | |
| <li class="nav-item position-relative" role="presentation"> | |
| <button class="nav-link" id="thesis-tab" data-bs-toggle="tab" data-bs-target="#thesis" type="button" role="tab" aria-controls="thesis" aria-selected="false">Πτυχιακές Εργασίες</button> | |
| </li> | |
| <li class="nav-item position-relative" role="presentation"> | |
| <button class="nav-link" id="student-search-tab" data-bs-toggle="tab" data-bs-target="#student-search" type="button" role="tab" aria-controls="student-search" aria-selected="false">Αναζήτηση Φοιτητή</button> | |
| </li> | |
| <li class="nav-item position-relative" role="presentation"> | |
| <button class="nav-link" id="professor-search-tab" data-bs-toggle="tab" data-bs-target="#professor-search" type="button" role="tab" aria-controls="professor-search" aria-selected="false">Αναζήτηση Καθηγητή</button> | |
| </li> | |
| <li class="nav-item position-relative" role="presentation"> | |
| <button class="nav-link" id="researchgroup-search-tab" data-bs-toggle="tab" data-bs-target="#researchgroup-search" type="button" role="tab" aria-controls="researchgroup-search" aria-selected="false">Αναζήτηση Ερευνητικής Ομάδας</button> | |
| </li> | |
| </ul> | |
| <!-- Tab panes --> | |
| <div class="tab-content mt-3" id="myTabContent"> | |
| <!-- CREATE ANNOUNCEMENTS TAB AS COMPANY --> | |
| <div class="tab-pane fade show active" id="announcements" role="tabpanel" aria-labelledby="announcements-tab"> | |
| <div class="mb-3 row-dark-gray"> | |
| <div class="d-flex justify-content-between align-items-center" @onclick="ToggleFormVisibilityToShowGeneralAnnouncementsAndEventsAsCompany" style="cursor: pointer;"> | |
| <label class="form-label" style="color: #FFF8DC;">• Πρόσφατες Ανακοινώσεις •</label> | |
| <button class="btn btn-link" @onclick="ToggleFormVisibilityToShowGeneralAnnouncementsAndEventsAsCompany" @onclick:stopPropagation="true"> | |
| @if (isAnnouncementsFormVisibleToShowGeneralAnnouncementsAndEventsAsCompany) | |
| { | |
| <span>−</span> <!-- Minus sign --> | |
| } | |
| else | |
| { | |
| <span>+</span> <!-- Plus sign --> | |
| } | |
| </button> | |
| </div> | |
| </div> | |
| @if (isAnnouncementsFormVisibleToShowGeneralAnnouncementsAndEventsAsCompany) | |
| { | |
| <!-- University News Section --> | |
| <div class="mb-3" style="background-color: #e6f2ff; border: 1px solid #b3c6e0; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);"> | |
| <div class="d-flex justify-content-between align-items-center p-3" | |
| style="border-bottom: 1px solid #b3c6e0; cursor: pointer;" | |
| @onclick="ToggleUniversityNewsVisibility"> | |
| <h1 class="news-heading form-label m-0"> | |
| <span class="black-text"> | |
| <span style="color: #b399d4; margin-left: 10px; margin-right: 5px;"> | |
| <i class="fas fa-rss"></i> | |
| </span> | |
| Πανεπιστήμιο Αθηνών | |
| <span style="color: black; margin-left: 5px;"> | |
| <i class="fas fa-university"></i> | |
| </span> | |
| </span> | |
| </h1> | |
| <button class="btn" | |
| style="width: 30px; height: 30px; border-radius: 50%; background-color: #0d47a1; color: white; border: none; padding: 0; display: flex; align-items: center; justify-content: center; margin-right: 10px;" | |
| @onclick="ToggleUniversityNewsVisibility"> | |
| @if (isUniversityNewsVisible) | |
| { | |
| <span>−</span> | |
| } | |
| else | |
| { | |
| <span>+</span> | |
| } | |
| </button> | |
| </div> | |
| @if (isUniversityNewsVisible) | |
| { | |
| <div id="university-news-content" class="p-3" style="border-top: 1px solid #e6f2ff;"> | |
| @if (newsArticles != null && newsArticles.Any()) | |
| { | |
| @foreach (var article in newsArticles) | |
| { | |
| <div class="news-article mb-2 pb-2" style="border-bottom: 1px dashed #ccc;"> | |
| <a href="@article.Url" target="_blank" style="color: #0d47a1; text-decoration: none;"> | |
| <i class="fa fa-external-link me-2" style="font-size: 0.8em;"></i>@article.Title | |
| </a> | |
| </div> | |
| } | |
| } | |
| else | |
| { | |
| <p class="mb-0 text-muted">Καμία Ανακοίνωση από το Πανεπιστήμιο Αθηνών ακόμη....</p> | |
| } | |
| </div> | |
| } | |
| </div> | |
| <!-- SVSE News Section --> | |
| <div class="mb-3" style="background-color: #e6f2ff; border: 1px solid #b3c6e0; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);"> | |
| <div class="d-flex justify-content-between align-items-center p-3" | |
| style="border-bottom: 1px solid #b3c6e0; cursor: pointer;" | |
| @onclick="ToggleSvseNewsVisibility"> | |
| <h1 class="news-heading form-label m-0"> | |
| <span class="black-text"> | |
| <span style="color: #b399d4; margin-left: 10px; margin-right: 5px;"> | |
| <i class="fas fa-rss"></i> | |
| </span> | |
| Σύνδεσμος Βιομηχανιών Στερεάς Ελλάδας | |
| <span style="color: black; margin-left: 5px;"> | |
| <i class="fas fa-industry"></i> | |
| </span> | |
| </span> | |
| </h1> | |
| <button class="btn" | |
| style="width: 30px; height: 30px; border-radius: 50%; background-color: #0d47a1; color: white; border: none; padding: 0; display: flex; align-items: center; justify-content: center; margin-right: 10px;" | |
| @onclick="ToggleSvseNewsVisibility"> | |
| @if (isSvseNewsVisible) | |
| { | |
| <span>−</span> <!-- Minus sign --> | |
| } | |
| else | |
| { | |
| <span>+</span> <!-- Plus sign --> | |
| } | |
| </button> | |
| </div> | |
| @if (isSvseNewsVisible) | |
| { | |
| <div id="svse-news-content" class="p-3" style="border-top: 1px solid #e6f2ff;"> | |
| @if (svseNewsArticles != null && svseNewsArticles.Any()) | |
| { | |
| @foreach (var article in svseNewsArticles) | |
| { | |
| <div class="news-article mb-2 pb-2" style="border-bottom: 1px dashed #ccc;"> | |
| <a href="@article.Url" target="_blank" style="color: #0d47a1; text-decoration: none;"> | |
| <i class="fa fa-external-link me-2" style="font-size: 0.8em;"></i>@article.Title | |
| </a> | |
| </div> | |
| } | |
| } | |
| else | |
| { | |
| <p class="mb-0 text-muted">Καμία Ανακοίνωση από τον ΣΒΣΕ ακόμη....</p> | |
| } | |
| </div> | |
| } | |
| </div> | |
| <!-- Platform company announcements --> | |
| <div class="mb-3" style="background-color: #e6f2ff; border: 1px solid #b3c6e0; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);"> | |
| <div class="d-flex justify-content-between align-items-center p-3" | |
| style="border-bottom: 1px solid #b3c6e0; cursor: pointer;" | |
| @onclick="ToggleCompanyAnnouncementsVisibility"> | |
| <h1 class="news-heading form-label m-0"> | |
| <span class="black-text"> | |
| <span style="color: #b399d4; margin-left: 10px; margin-right: 5px;"> | |
| <i class="fas fa-list"></i> | |
| </span> | |
| Ανακοινώσεις Εταιρειών | |
| <span style="color: black; margin-left: 5px;"> | |
| <i class="fas fa-building"></i> | |
| </span> | |
| </span> | |
| </h1> | |
| <button class="btn" | |
| style="width: 30px; height: 30px; border-radius: 50%; background-color: #0d47a1; color: white; border: none; padding: 0; display: flex; align-items: center; justify-content: center; margin-right: 10px;" | |
| @onclick="ToggleCompanyAnnouncementsVisibility"> | |
| @if (isCompanyAnnouncementsVisible) | |
| { | |
| <span>−</span> <!-- Minus sign --> | |
| } | |
| else | |
| { | |
| <span>+</span> <!-- Plus sign --> | |
| } | |
| </button> | |
| </div> | |
| @if (isCompanyAnnouncementsVisible) | |
| { | |
| <div class="p-3" style="border-top: 1px solid #e6f2ff;"> | |
| @if (Announcements != null && Announcements.Any(announcement => announcement.CompanyAnnouncementStatus == "Δημοσιευμένη")) | |
| { | |
| <!-- Display paginated announcements sorted by upload date descending --> | |
| @foreach (var announcement in Announcements | |
| .Where(a => a.CompanyAnnouncementStatus == "Δημοσιευμένη") | |
| .OrderByDescending(a => a.CompanyAnnouncementUploadDate) | |
| .Skip((currentPageForCompanyAnnouncements - 1) * pageSize) | |
| .Take(pageSize)) | |
| { | |
| <div class="news-article mb-3 pb-2" style="border-bottom: 1px dashed #ccc;"> | |
| <!-- Clicking on title toggles description --> | |
| <a href="javascript:void(0);" | |
| @onclick="() => ToggleDescription(announcement.Id)" | |
| style="display: block; max-width: 100%; overflow-wrap: break-word; color: #0d47a1; text-decoration: none; cursor: pointer;" | |
| title="Κάντε Κλικ εδώ για να δείτε την περιγραφή της ανακοίνωσης"> | |
| <span class="black-text">• <strong>@(announcement.Company?.CompanyName ?? "Άγνωστη Εταιρεία")</strong></span> - @announcement.CompanyAnnouncementTitle | |
| <span class="text-muted">(@announcement.CompanyAnnouncementUploadDate.ToString("dd/MM/yyyy"))</span> | |
| </a> | |
| <!-- Show description based on toggle state --> | |
| <div class="announcement-description mt-2 @(expandedAnnouncementId == announcement.Id ? "expanded" : "collapsed")"> | |
| @if (expandedAnnouncementId == announcement.Id) | |
| { | |
| <p style="color: #333;">@announcement.CompanyAnnouncementDescription</p> | |
| @if (announcement.CompanyAnnouncementAttachmentFile != null && announcement.CompanyAnnouncementAttachmentFile.Length > 0) | |
| { | |
| <p class="announcement-attachment mt-2"> | |
| <a href="#" | |
| @onclick="() => DownloadAnnouncementAttachmentFrontPage(announcement.CompanyAnnouncementAttachmentFile, announcement.CompanyAnnouncementTitle)" | |
| style="color: #c62828; text-decoration: none;" | |
| title="Κάντε Κλικ εδώ για να κατεβάσετε το αρχείο"> | |
| <i class="fa fa-download me-1"></i> | |
| Συννημένο Αρχείο Ανακοίνωσης | |
| </a> | |
| </p> | |
| } | |
| } | |
| </div> | |
| </div> | |
| } | |
| <!-- Pagination Controls for Company Announcements --> | |
| <div class="d-flex justify-content-center align-items-center mt-3 gap-1"> | |
| <!-- First Page (<<) --> | |
| <span class="pagination-item @(currentPageForCompanyAnnouncements == 1 ? "disabled" : "")" | |
| @onclick="GoToFirstPageForCompanyAnnouncements"> | |
| << | |
| </span> | |
| <!-- Previous Page (<) --> | |
| <span class="pagination-item @(currentPageForCompanyAnnouncements == 1 ? "disabled" : "")" | |
| @onclick="PreviousPageForCompanyAnnouncements"> | |
| < | |
| </span> | |
| <!-- Page Numbers --> | |
| @foreach (var pageNumber in GetVisiblePagesForCompanyAnnouncements()) | |
| { | |
| if (pageNumber == -1) | |
| { | |
| <span class="pagination-ellipsis">...</span> | |
| } | |
| else | |
| { | |
| <span class="pagination-item @(pageNumber == currentPageForCompanyAnnouncements ? "active" : "")" | |
| @onclick="() => GoToPageForCompanyAnnouncements(pageNumber)"> | |
| @pageNumber | |
| </span> | |
| } | |
| } | |
| <!-- Next Page (>) --> | |
| <span class="pagination-item @(currentPageForCompanyAnnouncements == totalPagesForCompanyAnnouncements ? "disabled" : "")" | |
| @onclick="NextPageForCompanyAnnouncements"> | |
| > | |
| </span> | |
| <!-- Last Page (>>) --> | |
| <span class="pagination-item @(currentPageForCompanyAnnouncements == totalPagesForCompanyAnnouncements ? "disabled" : "")" | |
| @onclick="GoToLastPageForCompanyAnnouncements"> | |
| >> | |
| </span> | |
| <span class="ms-3">Σελίδα @currentPageForCompanyAnnouncements από @totalPagesForCompanyAnnouncements</span> | |
| </div> | |
| } | |
| else | |
| { | |
| <p class="mb-0 text-muted">Καμία Ανακοίνωση από Εταιρείες ακόμη......</p> | |
| } | |
| </div> | |
| } | |
| </div> | |
| <!-- Platform professor announcements --> | |
| <div class="mb-3" style="background-color: #e6f2ff; border: 1px solid #b3c6e0; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);"> | |
| <div class="d-flex justify-content-between align-items-center p-3" | |
| style="border-bottom: 1px solid #b3c6e0; cursor: pointer;" | |
| @onclick="ToggleProfessorAnnouncementsVisibility"> | |
| <h1 class="news-heading form-label m-0"> | |
| <span class="black-text"> | |
| <span style="color: #b399d4; margin-left: 10px; margin-right: 5px;"> | |
| <i class="fas fa-list"></i> | |
| </span> | |
| Ανακοινώσεις Καθηγητών | |
| <span style="color: black; margin-left: 5px;"> | |
| <i class="fas fa-user-tie"></i> | |
| </span> | |
| </span> | |
| </h1> | |
| <button class="btn" | |
| style="width: 30px; height: 30px; border-radius: 50%; background-color: #0d47a1; color: white; border: none; padding: 0; display: flex; align-items: center; justify-content: center; margin-right: 10px; cursor: pointer;" | |
| @onclick="ToggleProfessorAnnouncementsVisibility"> | |
| @if (isProfessorAnnouncementsVisible) | |
| { | |
| <span>−</span> <!-- Minus sign --> | |
| } | |
| else | |
| { | |
| <span>+</span> <!-- Plus sign --> | |
| } | |
| </button> | |
| </div> | |
| @if (isProfessorAnnouncementsVisible) | |
| { | |
| <div class="p-3" style="border-top: 1px solid #e6f2ff;"> | |
| @if (ProfessorAnnouncements != null && ProfessorAnnouncements.Any(announcement => announcement.ProfessorAnnouncementStatus == "Δημοσιευμένη")) | |
| { | |
| <!-- Display paginated announcements sorted by upload date descending --> | |
| @foreach (var announcement in ProfessorAnnouncements | |
| .Where(a => a.ProfessorAnnouncementStatus == "Δημοσιευμένη") | |
| .OrderByDescending(a => a.ProfessorAnnouncementUploadDate) | |
| .Skip((currentPageForProfessorAnnouncements - 1) * pageSize) | |
| .Take(pageSize)) | |
| { | |
| <div class="news-article mb-3 pb-2" style="border-bottom: 1px dashed #ccc;"> | |
| <!-- Clicking on title toggles description --> | |
| <a href="javascript:void(0);" | |
| @onclick="() => ToggleDescriptionForProfessorAnnouncements(announcement.Id)" | |
| style="display: block; max-width: 100%; overflow-wrap: break-word; color: #0d47a1; text-decoration: none; cursor: pointer;" | |
| title="Κάντε Κλικ εδώ για να δείτε την περιγραφή της ανακοίνωσης"> | |
| <span class="black-text">• | |
| <strong>@(announcement.Professor?.ProfName ?? "N/A")</strong> | |
| <strong>@(announcement.Professor?.ProfSurname ?? "N/A")</strong> | |
| </span> - @announcement.ProfessorAnnouncementTitle | |
| <span class="text-muted">(@announcement.ProfessorAnnouncementUploadDate.ToString("dd/MM/yyyy"))</span> | |
| </a> | |
| <!-- Show description based on toggle state --> | |
| <div class="announcement-description mt-2 @(expandedProfessorAnnouncementId == announcement.Id ? "expanded" : "collapsed")"> | |
| @if (expandedProfessorAnnouncementId == announcement.Id) | |
| { | |
| <p style="color: #333;">@announcement.ProfessorAnnouncementDescription</p> | |
| @if (announcement.ProfessorAnnouncementAttachmentFile != null && announcement.ProfessorAnnouncementAttachmentFile.Length > 0) | |
| { | |
| <p class="announcement-attachment mt-2"> | |
| <a href="#" | |
| @onclick="() => DownloadProfessorAnnouncementAttachmentFrontPage(announcement.ProfessorAnnouncementAttachmentFile, announcement.ProfessorAnnouncementTitle)" | |
| style="color: #c62828; text-decoration: none;" | |
| title="Κάντε Κλικ εδώ για να κατεβάσετε το αρχείο"> | |
| <i class="fa fa-download me-1"></i> | |
| Συννημένο Αρχείο Ανακοίνωσης | |
| </a> | |
| </p> | |
| } | |
| } | |
| </div> | |
| </div> | |
| } | |
| <!-- Pagination Controls for Professor Announcements --> | |
| <div class="d-flex justify-content-center align-items-center mt-3 gap-1"> | |
| <!-- First Page (<<) --> | |
| <span class="pagination-item @(currentPageForProfessorAnnouncements == 1 ? "disabled" : "")" | |
| @onclick="GoToFirstPageForProfessorAnnouncements"> | |
| << | |
| </span> | |
| <!-- Previous Page (<) --> | |
| <span class="pagination-item @(currentPageForProfessorAnnouncements == 1 ? "disabled" : "")" | |
| @onclick="PreviousPageForProfessorAnnouncements"> | |
| < | |
| </span> | |
| <!-- Page Numbers --> | |
| @foreach (var pageNumber in GetVisiblePagesForProfessorAnnouncements()) | |
| { | |
| if (pageNumber == -1) | |
| { | |
| <span class="pagination-ellipsis">...</span> | |
| } | |
| else | |
| { | |
| <span class="pagination-item @(pageNumber == currentPageForProfessorAnnouncements ? "active" : "")" | |
| @onclick="() => GoToPageForProfessorAnnouncements(pageNumber)"> | |
| @pageNumber | |
| </span> | |
| } | |
| } | |
| <!-- Next Page (>) --> | |
| <span class="pagination-item @(currentPageForProfessorAnnouncements == totalPagesForProfessorAnnouncements ? "disabled" : "")" | |
| @onclick="NextPageForProfessorAnnouncements"> | |
| > | |
| </span> | |
| <!-- Last Page (>>) --> | |
| <span class="pagination-item @(currentPageForProfessorAnnouncements == totalPagesForProfessorAnnouncements ? "disabled" : "")" | |
| @onclick="GoToLastPageForProfessorAnnouncements"> | |
| >> | |
| </span> | |
| <span class="ms-3">Σελίδα @currentPageForProfessorAnnouncements από @totalPagesForProfessorAnnouncements</span> | |
| </div> | |
| } | |
| else | |
| { | |
| <p class="mb-0 text-muted">Καμία Ανακοίνωση από Καθηγητές ακόμη......</p> | |
| } | |
| </div> | |
| } | |
| </div> | |
| <!-- Platform research group announcements --> | |
| <div class="mb-3" style="background-color: #e6f2ff; border: 1px solid #b3c6e0; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);"> | |
| <div class="d-flex justify-content-between align-items-center p-3" | |
| style="border-bottom: 1px solid #b3c6e0; cursor: pointer;" | |
| @onclick="ToggleResearchGroupPublicAnnouncementsVisibility"> | |
| <h1 class="news-heading form-label m-0"> | |
| <span class="black-text"> | |
| <span style="color: #b399d4; margin-left: 10px; margin-right: 5px;"> | |
| <i class="fas fa-list"></i> | |
| </span> | |
| Ανακοινώσεις Ερευνητικών Ομάδων | |
| <span style="color: black; margin-left: 5px;"> | |
| <i class="fa-solid fa-flask"></i> | |
| </span> | |
| </span> | |
| </h1> | |
| <button class="btn" | |
| style="width: 30px; height: 30px; border-radius: 50%; background-color: #0d47a1; color: white; border: none; padding: 0; display: flex; align-items: center; justify-content: center; margin-right: 10px; cursor: pointer;" | |
| @onclick="ToggleResearchGroupPublicAnnouncementsVisibility"> | |
| @if (isResearchGroupPublicAnnouncementsVisible) | |
| { | |
| <span>−</span> <!-- Minus sign --> | |
| } | |
| else | |
| { | |
| <span>+</span> <!-- Plus sign --> | |
| } | |
| </button> | |
| </div> | |
| @if (isResearchGroupPublicAnnouncementsVisible) | |
| { | |
| <div class="p-3" style="border-top: 1px solid #e6f2ff;"> | |
| @if (ResearchGroupAnnouncements != null && ResearchGroupAnnouncements.Any(announcement => announcement.ResearchGroupAnnouncementStatus == "Δημοσιευμένη")) | |
| { | |
| <!-- Display paginated announcements sorted by upload date descending --> | |
| @foreach (var announcement in ResearchGroupAnnouncements | |
| .Where(a => a.ResearchGroupAnnouncementStatus == "Δημοσιευμένη") | |
| .OrderByDescending(a => a.ResearchGroupAnnouncementUploadDate) | |
| .Skip((currentPageForResearchGroupPublicAnnouncements - 1) * pageSize) | |
| .Take(pageSize)) | |
| { | |
| <div class="news-article mb-3 pb-2" style="border-bottom: 1px dashed #ccc;"> | |
| <!-- Clicking on title toggles description --> | |
| <a href="javascript:void(0);" | |
| @onclick="() => ToggleDescriptionForResearchGroupPublicAnnouncements(announcement.Id)" | |
| style="display: block; max-width: 100%; overflow-wrap: break-word; color: #0d47a1; text-decoration: none; cursor: pointer;" | |
| title="Κάντε Κλικ εδώ για να δείτε την περιγραφή της ανακοίνωσης"> | |
| <span class="black-text">• | |
| <strong>@(announcement.ResearchGroup?.ResearchGroupName ?? "Άγνωστη Ερευνητική Ομάδα")</strong> | |
| </span> - @announcement.ResearchGroupAnnouncementTitle | |
| <span class="text-muted">(@announcement.ResearchGroupAnnouncementUploadDate.ToString("dd/MM/yyyy"))</span> | |
| </a> | |
| <!-- Show description based on toggle state --> | |
| <div class="announcement-description mt-2 @(expandedResearchGroupPublicAnnouncementId == announcement.Id ? "expanded" : "collapsed")"> | |
| @if (expandedResearchGroupPublicAnnouncementId == announcement.Id) | |
| { | |
| <p style="color: #333;">@announcement.ResearchGroupAnnouncementDescription</p> | |
| @if (announcement.ResearchGroupAnnouncementAttachmentFile != null && announcement.ResearchGroupAnnouncementAttachmentFile.Length > 0) | |
| { | |
| <p class="announcement-attachment mt-2"> | |
| <a href="#" | |
| @onclick="() => DownloadResearchGroupPublicAnnouncementAttachmentFrontPage(announcement.ResearchGroupAnnouncementAttachmentFile, announcement.ResearchGroupAnnouncementTitle)" | |
| style="color: #c62828; text-decoration: none;" | |
| title="Κάντε Κλικ εδώ για να κατεβάσετε το αρχείο"> | |
| <i class="fa fa-download me-1"></i> | |
| Συννημένο Αρχείο Ανακοίνωσης | |
| </a> | |
| </p> | |
| } | |
| } | |
| </div> | |
| </div> | |
| } | |
| <!-- Pagination Controls for Research Group Announcements --> | |
| <div class="d-flex justify-content-center align-items-center mt-3 gap-1"> | |
| <!-- First Page (<<) --> | |
| <span class="pagination-item @(currentPageForResearchGroupPublicAnnouncements == 1 ? "disabled" : "")" | |
| @onclick="GoToFirstPageForResearchGroupPublicAnnouncements"> | |
| << | |
| </span> | |
| <!-- Previous Page (<) --> | |
| <span class="pagination-item @(currentPageForResearchGroupPublicAnnouncements == 1 ? "disabled" : "")" | |
| @onclick="PreviousPageForResearchGroupPublicAnnouncements"> | |
| < | |
| </span> | |
| <!-- Page Numbers --> | |
| @foreach (var pageNumber in GetVisiblePagesForResearchGroupPublicAnnouncements()) | |
| { | |
| if (pageNumber == -1) | |
| { | |
| <span class="pagination-ellipsis">...</span> | |
| } | |
| else | |
| { | |
| <span class="pagination-item @(pageNumber == currentPageForResearchGroupPublicAnnouncements ? "active" : "")" | |
| @onclick="() => GoToPageForResearchGroupPublicAnnouncements(pageNumber)"> | |
| @pageNumber | |
| </span> | |
| } | |
| } | |
| <!-- Next Page (>) --> | |
| <span class="pagination-item @(currentPageForResearchGroupPublicAnnouncements == totalPagesForResearchGroupPublicAnnouncements ? "disabled" : "")" | |
| @onclick="NextPageForResearchGroupPublicAnnouncements"> | |
| > | |
| </span> | |
| <!-- Last Page (>>) --> | |
| <span class="pagination-item @(currentPageForResearchGroupPublicAnnouncements == totalPagesForResearchGroupPublicAnnouncements ? "disabled" : "")" | |
| @onclick="GoToLastPageForResearchGroupPublicAnnouncements"> | |
| >> | |
| </span> | |
| <span class="ms-3">Σελίδα @currentPageForResearchGroupPublicAnnouncements από @totalPagesForResearchGroupPublicAnnouncements</span> | |
| </div> | |
| } | |
| else | |
| { | |
| <p class="mb-0 text-muted">Καμία Ανακοίνωση από Ερευνητικές Ομάδες ακόμη......</p> | |
| } | |
| </div> | |
| } | |
| </div> | |
| } | |
| @*iNPUT FIELDS SHOULD BE HERE FOR UPLOAD ANNOUNCEMENT AS COMPANY*@ | |
| <!-- Announcement Form --> | |
| <div class="tab-pane fade show active" id="announcements" role="tabpanel" aria-labelledby="announcements-tab"> | |
| <div class="mb-3 row-dark-gray"> | |
| <div class="d-flex justify-content-between align-items-center" @onclick="ToggleFormVisibilityForUploadCompanyAnnouncements" style="cursor: pointer;"> | |
| <label class="form-label" style="color: #FFF8DC;">• Δημιουργία Ανακοίνωσης •</label> | |
| <button class="btn btn-link" @onclick="ToggleFormVisibilityForUploadCompanyAnnouncements" @onclick:stopPropagation="true"> | |
| @if (isAnnouncementsFormVisible) | |
| { | |
| <span>−</span> <!-- Minus sign --> | |
| } | |
| else | |
| { | |
| <span>+</span> <!-- Plus sign --> | |
| } | |
| </button> | |
| </div> | |
| </div> | |
| @if (isAnnouncementsFormVisible) | |
| { | |
| <div class="row mb-3"> | |
| <div class="col-md-4 position-relative"> | |
| <label for="announcementTitle"> | |
| <strong>Τίτλος Ανακοίνωσης</strong> | |
| <span style="color: red;">*</span> | |
| </label> | |
| <input type="text" id="announcementTitle" class="form-control @(showErrorMessageforUploadingAnnouncementAsCompany && string.IsNullOrWhiteSpace(announcement.CompanyAnnouncementTitle) ? "shake error" : "")" | |
| @bind="announcement.CompanyAnnouncementTitle" | |
| @oninput="CheckCharacterLimitInAnnouncementFieldUploadAsCompany" maxlength="120" /> | |
| <small class="character-limit light-cadetblue-text">@remainingCharactersInAnnouncementFieldUploadAsCompany/120</small> | |
| </div> | |
| @if (showErrorMessageforUploadingAnnouncementAsCompany && string.IsNullOrWhiteSpace(announcement.CompanyAnnouncementTitle)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται Tίτλος Ανακοίνωσης!</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4 position-relative"> | |
| <label for="CompanyAnnouncementDescription"><strong>Περιγραφή Ανακοίνωσης</strong> <span style="color: red;"> *</span></label> | |
| <textarea id="CompanyAnnouncementDescription" class="form-control @(showErrorMessageforUploadingAnnouncementAsCompany && string.IsNullOrWhiteSpace(announcement.CompanyAnnouncementDescription) ? "shake error" : "")" | |
| @bind="announcement.CompanyAnnouncementDescription" | |
| @oninput="CheckCharacterLimitInAnnouncementDescriptionUploadAsCompany" | |
| maxlength="1000" | |
| placeholder="Πληκτρολογείστε την Ανακοίνωσή σας"></textarea> | |
| <small class="character-limit light-cadetblue-text">@remainingCharactersInAnnouncementDescriptionUploadAsCompany/1000</small> | |
| </div> | |
| @if (showErrorMessageforUploadingAnnouncementAsCompany && string.IsNullOrWhiteSpace(announcement.CompanyAnnouncementDescription)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται Περιγραφή της Ανακοίνωσης!</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4 position-relative"> | |
| <label for="CompanyAnnouncementTimeToBeActive"><strong>Ημερομηνία Λήξης Ανακοίνωσης</strong> <span style="color: red;"> *</span></label> | |
| <input type="date" id="CompanyAnnouncementTimeToBeActive" class="form-control @(showErrorMessageforUploadingAnnouncementAsCompany && announcement.CompanyAnnouncementTimeToBeActive.Date == DateTime.Today ? "shake error" : "")" | |
| @bind="announcement.CompanyAnnouncementTimeToBeActive" /> | |
| </div> | |
| @if (showErrorMessageforUploadingAnnouncementAsCompany && announcement.CompanyAnnouncementTimeToBeActive.Date <= DateTime.Today) | |
| { | |
| <div class="text-danger mt-1">Η ημερομηνία πρέπει να είναι μεταγενέστερη της σημερινής ημερομηνίας.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4 position-relative"> | |
| <label for="announcementAttachment">Συνημμένο Αρχείο Ανακοίνωσης<span style="font-style: italic; color: gray;"> (Προαιρετικό)</span></label> | |
| <InputFile id="announcementAttachment" class="form-control" OnChange="HandleFileSelectedForAnnouncementAttachment" /> | |
| </div> | |
| </div> | |
| <!-- Save Buttons --> | |
| <div class="row mb-3"> | |
| <div class="col-md-12"> | |
| <button class="modern-button" style="background-color: #2d3748; color: white; display: inline-flex; align-items: center;" @onclick="SaveAnnouncementAsUnpublished"> | |
| <i class="fa-regular fa-floppy-disk" style="margin-right: 8px;"></i>Προσωρινή Αποθήκευση Ανακοίνωσης | |
| </button> | |
| <button class="modern-button" style="background-color: #2d3748; color: white; display: inline-flex; align-items: center;" @onclick="SaveAnnouncementAsPublished"> | |
| <i class="fa-solid fa-floppy-disk" style="margin-right: 8px;"></i>Δημοσίευση Ανακοίνωσης | |
| </button> | |
| </div> | |
| </div> | |
| <!-- Loading Modal --> | |
| @if (showLoadingModal) | |
| { | |
| <div class="loading-modal"> | |
| <div class="loading-modal-content"> | |
| <div class="loading-spinner"></div> | |
| <p>Αποθήκευση Ανακοίνωσης...</p> | |
| <div class="progress-bar"> | |
| <div class="progress-bar-fill" style="width: @loadingProgress%"></div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| <!-- Error message if required fields are not filled --> | |
| @if (!isFormValidToSaveAnnouncementAsCompany) | |
| { | |
| <div class="alert alert-danger" role="alert"> | |
| Συμπληρώστε Όλα Τα Υποχρεωτικά Πεδία και Προσπαθήστε Ξανά | |
| </div> | |
| } | |
| @if (!string.IsNullOrEmpty(saveAnnouncementAsCompanyMessage)) | |
| { | |
| <div class="alert @(isSaveAnnouncementAsCompanySuccessful ? "alert-success" : "alert-danger")" role="alert"> | |
| @saveAnnouncementAsCompanyMessage | |
| </div> | |
| } | |
| } | |
| </div> | |
| <!-- VIEW UPLOADED ANNOUNCEMENTS AS COMPANY --> | |
| <div class="mb-3 row-dark-gray mt-4"> | |
| <div class="d-flex justify-content-between align-items-center" @onclick="ToggleUploadedAnnouncementsVisibility" style="cursor: pointer;"> | |
| <label class="form-label" style="color: #FFF8DC;"> | |
| @if (isLoadingUploadedAnnouncements) | |
| { | |
| <span> | |
| <i class="fas fa-spinner fa-spin me-2"></i> | |
| Φόρτωση Ανακοινώσεων... | |
| </span> | |
| } | |
| else | |
| { | |
| <span>• Οι Ανακοινώσεις μου •</span> | |
| } | |
| </label> | |
| <button class="btn btn-link" @onclick="ToggleUploadedAnnouncementsVisibility" @onclick:stopPropagation="true"> | |
| @if (isUploadedAnnouncementsVisible && !isLoadingUploadedAnnouncements) | |
| { | |
| <span>−</span> <!-- Minus sign --> | |
| } | |
| else if (!isLoadingUploadedAnnouncements) | |
| { | |
| <span>+</span> <!-- Plus sign --> | |
| } | |
| </button> | |
| </div> | |
| </div> | |
| @if (isUploadedAnnouncementsVisible && !isLoadingUploadedAnnouncements) | |
| { | |
| <div class="col-md-2"> | |
| <label for="statusFilterForAnnouncements" style="color: #2d3748;"><strong>Φίλτρο Εμφάνισης</strong></label> | |
| <div class="input-group"> | |
| <select id="statusFilterForAnnouncements" class="form-control form-control-sm" | |
| @onchange="HandleStatusFilterChange"> | |
| <option value="Όλα">Όλες</option> | |
| <option value="Δημοσιευμένη">Δημοσιευμένες</option> | |
| <option value="Μη Δημοσιευμένη">Μη Δημοσιευμένες</option> | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Add this new dropdown for items per page --> | |
| <div class="col-md-2"> | |
| <label style="color: #2d3748;"><strong>Αποτελέσματα ανά Σελίδα</strong></label> | |
| <div class="input-group" style="max-width: 65px;"> | |
| <select class="form-control form-control-sm" @onchange="OnPageSizeChange_SeeMyUploadedAnnouncementsAsCompany"> | |
| @foreach (var option in pageSizeOptions_SeeMyUploadedAnnouncementsAsCompany) | |
| { | |
| <option value="@option" selected="@(pageSizeForAnnouncements == option)">@option</option> | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <br/> | |
| <div class="col-md-2"> | |
| @if (selectedStatusFilterForAnnouncements == "Όλα") | |
| { | |
| <span><strong>Σύνολο: </strong>@totalCountAnnouncements</span> | |
| } | |
| else if (selectedStatusFilterForAnnouncements == "Δημοσιευμένη") | |
| { | |
| <span><strong>Σύνολο: </strong>@publishedCountAnnouncements</span> | |
| } | |
| else if (selectedStatusFilterForAnnouncements == "Μη Δημοσιευμένη") | |
| { | |
| <span><strong>Σύνολο: </strong>@unpublishedCountAnnouncements</span> | |
| } | |
| </div> | |
| <div style="max-width: auto; margin-left: 0;"> | |
| <div class="table-responsive"> | |
| <table class="table table-striped"> | |
| <thead> | |
| <tr style="background-color: lightgray; border: 2px solid black;"> | |
| <th style="border: 2px solid black;"><i class="fa-solid fa-key fa-sm" style="color: #0d6efd;"></i> Κωδικός Θέσης</th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-font fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Τίτλος | |
| </th> | |
| <th style="width: 30%; border: 2px solid black;"> | |
| <i class="fa-solid fa-file-lines fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Περιγραφή | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-calendar-days fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ημερομηνία Δημοσίευσης | |
| </th> | |
| <th style="border: 2px solid black;"><i class="fa-solid fa-up-down fa-sm" style="color: #4682b4;"></i> Κατάσταση</th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-hand fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ενέργειες | |
| </th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| @if (FilteredAnnouncements != null && FilteredAnnouncements.Any()) | |
| { | |
| @foreach (var announcement in GetPaginatedAnnouncements()) | |
| { | |
| <tr style="background-color: @(announcement.CompanyAnnouncementStatus == "Δημοσιευμένη" ? "lightblue" : "lightcoral");"> | |
| <td style="color: #2d3748;"> | |
| @announcement.CompanyAnnouncementRNG_HashedAsUniqueID | |
| </td> | |
| <td>@announcement.CompanyAnnouncementTitle</td> | |
| <td style="width: 30%;"> | |
| @if (announcement.CompanyAnnouncementDescription.Length > 50) | |
| { | |
| @announcement.CompanyAnnouncementDescription.Substring(0, 50) | |
| } | |
| else | |
| { | |
| @announcement.CompanyAnnouncementDescription | |
| } | |
| </td> | |
| <td>@announcement.CompanyAnnouncementUploadDate.ToString("dd/MM/yyyy")</td> | |
| <td>@announcement.CompanyAnnouncementStatus</td> | |
| <td> | |
| <div class="d-flex gap-1"> <!-- Added flex container with gap --> | |
| <!-- Trash button --> | |
| <button class="btn btn-action btn-delete" @onclick="() => DeleteAnnouncement(announcement.Id)" title="Διαγραφή Ανακοίνωσης"> | |
| <i class="fas fa-trash icon-button"></i> | |
| </button> | |
| <!-- Loading Modal for Delete Announcement --> | |
| @if (showLoadingModalForDeleteAnnouncement) | |
| { | |
| <div class="loading-modal"> | |
| <div class="loading-modal-content"> | |
| <div class="loading-spinner"></div> | |
| <p>Διαγραφή Ανακοίνωσης...</p> | |
| <div class="progress-bar"> | |
| <div class="progress-bar-fill" style="width: @loadingProgress%"></div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| <!-- Eye icon button to view details --> | |
| <button class="btn btn-action btn-view" @onclick="() => OpenCompanyAnnouncementDetailsModal(announcement)" title="Προβολή Ανακοίνωσης"> | |
| <i class="fas fa-eye icon-button"></i> | |
| </button> | |
| <!-- Arrow down/up buttons --> | |
| @if (announcement.CompanyAnnouncementStatus == "Δημοσιευμένη") | |
| { | |
| <button class="btn btn-action btn-unpublish" @onclick='async () => await ChangeAnnouncementStatus(announcement.Id, "Μη Δημοσιευμένη")' title="Αποδημοσίευση Ανακοίνωσης"> | |
| <i class="fas fa-arrow-down icon-button"></i> | |
| </button> | |
| } | |
| else if (announcement.CompanyAnnouncementStatus == "Μη Δημοσιευμένη") | |
| { | |
| <button class="btn btn-action btn-publish" @onclick='async () => await ChangeAnnouncementStatus(announcement.Id, "Δημοσιευμένη")' title="Δημοσίευση Ανακοίνωσης"> | |
| <i class="fas fa-arrow-up icon-button"></i> | |
| </button> | |
| <!-- Pencil icon button to edit the announcement --> | |
| <button class="btn btn-action btn-edit" @onclick="() => OpenEditModal(announcement)" title="Επεξεργασία Ανακοίνωσης"> | |
| <i class="fas fa-pencil-alt icon-button"></i> | |
| </button> | |
| } | |
| </div> | |
| </td> | |
| </tr> | |
| } | |
| } | |
| else | |
| { | |
| <tr> | |
| <td colspan="5" class="text-center">Δεν υπάρχουν Ανακοινώσεις</td> | |
| </tr> | |
| } | |
| </tbody> | |
| </table> | |
| <br/> | |
| <!-- Pagination Controls --> | |
| <div class="d-flex justify-content-center align-items-center mt-3 gap-1"> | |
| <!-- First Page (<<) --> | |
| <span class="pagination-item @(currentPageForAnnouncements == 1 ? "disabled" : "")" | |
| @onclick="@(() => GoToFirstPageForAnnouncements())"> | |
| << | |
| </span> | |
| <!-- Previous Page (<) --> | |
| <span class="pagination-item @(currentPageForAnnouncements == 1 ? "disabled" : "")" | |
| @onclick="@(() => PreviousPageForAnnouncements())"> | |
| < | |
| </span> | |
| <!-- Page Numbers --> | |
| @foreach (var pageNum in GetVisiblePagesForAnnouncements()) | |
| { | |
| @if (pageNum == -1) | |
| { | |
| <span class="pagination-ellipsis">...</span> | |
| } | |
| else | |
| { | |
| <span class="pagination-item @(pageNum == currentPageForAnnouncements ? "active" : "")" | |
| @onclick="@(() => GoToPageForAnnouncements(pageNum))"> | |
| @pageNum | |
| </span> | |
| } | |
| } | |
| <!-- Next Page (>) --> | |
| <span class="pagination-item @(currentPageForAnnouncements == totalPagesForAnnouncements ? "disabled" : "")" | |
| @onclick="@(() => NextPageForAnnouncements())"> | |
| > | |
| </span> | |
| <!-- Last Page (>>) --> | |
| <span class="pagination-item @(currentPageForAnnouncements == totalPagesForAnnouncements ? "disabled" : "")" | |
| @onclick="@(() => GoToLastPageForAnnouncements())"> | |
| >> | |
| </span> | |
| <!-- Page counter --> | |
| <span class="ms-3">Σελίδα @currentPageForAnnouncements από @totalPagesForAnnouncements</span> | |
| </div> | |
| <br/> | |
| </div> | |
| </div> | |
| <br/> | |
| } | |
| @if (selectedCompanyAnnouncementToSeeDetailsAsCompany != null) | |
| { | |
| <div class="modal fade show d-block" tabindex="-1" role="dialog" style="background-color: rgba(0,0,0,0.5);"> | |
| <div class="modal-dialog modal-dialog-centered" role="document"> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title" style="color: #4682B4;">@selectedCompanyAnnouncementToSeeDetailsAsCompany.CompanyAnnouncementTitle</h5> | |
| <button type="button" class="close" @onclick="CloseCompanyAnnouncementDetailsModal"> | |
| <span>×</span> | |
| </button> | |
| </div> | |
| <div class="modal-body"> | |
| <div class="form-group"> | |
| <label for="viewTitle"><strong>Τίτλος</strong></label> | |
| <input type="text" id="viewTitle" class="form-control" value="@selectedCompanyAnnouncementToSeeDetailsAsCompany.CompanyAnnouncementTitle" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewDescription"><strong>Περιγραφή</strong></label> | |
| <textarea id="viewDescription" class="form-control" readonly>@selectedCompanyAnnouncementToSeeDetailsAsCompany.CompanyAnnouncementDescription</textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Ημερομηνία Δημοσίευσης</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="far fa-calendar-alt" style="color: #5F9EA0; margin-right: 8px;"></i> | |
| <span>@selectedCompanyAnnouncementToSeeDetailsAsCompany.CompanyAnnouncementUploadDate.ToString("dd/MM/yyyy")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Ισχύς έως</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="far fa-calendar-alt" style="color: #5F9EA0; margin-right: 8px;"></i> | |
| <span>@selectedCompanyAnnouncementToSeeDetailsAsCompany.CompanyAnnouncementTimeToBeActive.ToString("dd/MM/yyyy")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewStatus"><strong>Κατάσταση</strong></label> | |
| <select id="viewStatus" class="form-control" disabled> | |
| <option value="Δημοσιευμένη" selected="@(selectedCompanyAnnouncementToSeeDetailsAsCompany.CompanyAnnouncementStatus == "Δημοσιευμένη")">Δημοσιευμένη</option> | |
| <option value="Μη Δημοσιευμένη" selected="@(selectedCompanyAnnouncementToSeeDetailsAsCompany.CompanyAnnouncementStatus == "Μη Δημοσιευμένη")">Μη Δημοσιευμένη</option> | |
| </select> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewCompanyName"><strong>Εταιρεία</strong></label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-building" style="color: #5F9EA0; margin-right: 8px;"></i> | |
| <span>@(selectedCompanyAnnouncementToSeeDetailsAsCompany.Company?.CompanyName ?? "Άγνωστη Εταιρεία")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Email Εταιρείας</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-envelope" style="color: #5F9EA0; margin-right: 8px;"></i> | |
| <span>@selectedCompanyAnnouncementToSeeDetailsAsCompany.CompanyAnnouncementCompanyEmail</span> | |
| </div> | |
| </div> | |
| <br/> | |
| @if (selectedCompanyAnnouncementToSeeDetailsAsCompany.CompanyAnnouncementAttachmentFile != null) | |
| { | |
| <div class="form-group"> | |
| <label for="viewAttachment"><strong>Συνημμένο</strong></label> | |
| <p> | |
| <a href="data:application/pdf;base64,@Convert.ToBase64String(selectedCompanyAnnouncementToSeeDetailsAsCompany.CompanyAnnouncementAttachmentFile)" | |
| download="Announcement.pdf" class="btn btn-primary"> | |
| Λήψη Αρχείου | |
| </a> | |
| </p> | |
| </div> | |
| } | |
| </div> | |
| <div class="modal-footer"> | |
| <button type="button" class="btn btn-secondary" @onclick="CloseCompanyAnnouncementDetailsModal">Κλείσιμο</button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| <!-- Modal for editing announcement --> | |
| @if (isEditModalVisible) | |
| { | |
| <div class="modal fade show" style="display: block;" tabindex="-1" role="dialog" aria-modal="true"> | |
| <div class="modal-dialog" role="document"> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title" style="color: #4682B4;">@currentAnnouncement.CompanyAnnouncementTitle</h5> | |
| <button type="button" class="close" @onclick="CloseEditModal"> | |
| <span>×</span> | |
| </button> | |
| </div> | |
| <div class="modal-body"> | |
| <div class="form-group"> | |
| <label for="title"><strong>Τίτλος</strong></label> | |
| <input type="text" id="title" class="form-control" @bind="currentAnnouncement.CompanyAnnouncementTitle" /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="description"><strong>Περιγραφή</strong></label> | |
| <textarea id="description" class="form-control" @bind="currentAnnouncement.CompanyAnnouncementDescription"></textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label for="uploadDate"><strong>Ημερομηνία Δημοσίευσης</strong></label> | |
| <input type="date" id="uploadDate" class="form-control" @bind="currentAnnouncement.CompanyAnnouncementUploadDate" /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="status"><strong>Κατάσταση</strong></label> | |
| <select id="status" class="form-control" @bind="currentAnnouncement.CompanyAnnouncementStatus"> | |
| <option value="Δημοσιευμένη">Δημοσιευμένη</option> | |
| <option value="Μη Δημοσιευμένη">Μη Δημοσιευμένη</option> | |
| </select> | |
| </div> | |
| <div class="form-group"> | |
| <label><strong>Εταιρεία</strong></label> | |
| <div class="form-control-plaintext"> | |
| @(currentAnnouncement.Company?.CompanyName ?? "Άγνωστη Εταιρεία") | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="companyEmail"><strong>Email Εταιρείας</strong></label> | |
| <input type="email" id="companyEmail" class="form-control" | |
| @bind="currentAnnouncement.CompanyAnnouncementCompanyEmail" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="activeUntil"><strong>Ισχύς έως</strong></label> | |
| <input type="date" id="activeUntil" class="form-control" | |
| @bind="currentAnnouncement.CompanyAnnouncementTimeToBeActive" /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editJobAttachment"><strong>Αντικατάσταση Συνημμένου</strong></label> | |
| <InputFile OnChange="HandleFileUploadToEditCompanyAnnouncementAttachment" /> | |
| </div> | |
| </div> | |
| <div class="modal-footer"> | |
| <button class="btn btn-primary" @onclick="() => UpdateAnnouncement(currentAnnouncement)">Αποθήκευση</button> | |
| <button class="btn btn-secondary" @onclick="CloseEditModal">Κλείσιμο</button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| </div> | |
| <!-- CREATE JOBS TAB AS COMPANY --> | |
| <div class="tab-pane fade" id="jobs" role="tabpanel" aria-labelledby="jobs-tab"> | |
| <!-- Add your content here --> | |
| @*iNPUT FIELDS SHOULD BE HERE FOR UPLOAD JOB AS COMPANY*@ | |
| <div class="tab-pane" id="jobs" role="tabpanel" aria-labelledby="jobs-tab"> | |
| <div class="mb-3 row-dark-gray"> | |
| <div class="d-flex justify-content-between align-items-center" @onclick="ToggleFormVisibilityForUploadCompanyJobs" style="cursor: pointer;"> | |
| <label class="form-label" style="color: #FFF8DC;">• Δημιουργία Θέσης Εργασίας •</label> | |
| <button class="btn btn-link" @onclick="ToggleFormVisibilityForUploadCompanyJobs" @onclick:stopPropagation="true"> | |
| @if (isForm1Visible) | |
| { | |
| <span>−</span> <!-- Minus sign --> | |
| } | |
| else | |
| { | |
| <span>+</span> <!-- Plus sign --> | |
| } | |
| </button> | |
| </div> | |
| </div> | |
| @if (isForm1Visible) | |
| { | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="positionType"> | |
| <strong>Τύπος Θέσης</strong> | |
| <span style="color: red;">*</span> | |
| </label> | |
| <div class="input-group"> | |
| <select id="positionType" class="form-control @(showErrorMessageforUploadingjobsAsCompany && string.IsNullOrWhiteSpace(job.PositionType) ? "shake error" : "")" @bind="job.PositionType"> | |
| <option value="">-- Επιλέξτε --</option> | |
| <option value="Full-Time">Αορίστου Χρόνου</option> | |
| <option value="Part-Time">Περιορισμένου Χρόνου</option> | |
| <option value="Simvasi-Ergou">Σύμβαση Έργου</option> | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| @if (showErrorMessageforUploadingjobsAsCompany && string.IsNullOrWhiteSpace(job.PositionType)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται Τύπος Θέσης.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4 position-relative"> | |
| <label for="positionTitle"> | |
| <strong>Τίτλος Θέσης</strong> | |
| <span style="color: red;">*</span> | |
| </label> | |
| <input type="text" id="positionTitle" class="form-control @(showErrorMessageforUploadingjobsAsCompany && string.IsNullOrWhiteSpace(job.PositionTitle) ? "shake error" : "")" @bind="job.PositionTitle" @oninput="CheckCharacterLimitInJobFieldUploadAsCompany" maxlength="120" /> | |
| <small class="character-limit light-cadetblue-text">@remainingCharactersInJobFieldUploadAsCompany/120</small> | |
| </div> | |
| @if (showErrorMessageforUploadingjobsAsCompany && string.IsNullOrWhiteSpace(job.PositionTitle)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται Περιγραφή της Θέσης Εργασίας.</div> | |
| } | |
| </div> | |
| @* | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="positionTitle">Φορέας</label> | |
| <input type="text" id="positionTitle" class="form-control" @bind="job.PositionForeas" /> | |
| </div> | |
| </div> | |
| *@ | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="positionTitle">Υπεύθυνο Τμήμα <span style="font-style: italic; color: gray;"> (Προαιρετικό)</span></label> | |
| <input type="text" id="positionTitle" class="form-control" @bind="job.PositionDepartment" /> | |
| </div> | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="PositionContactPerson"> | |
| <strong>Email Υπευθύνου</strong> | |
| <span style="color: red;">*</span> | |
| </label> | |
| <input type="email" id="PositionContactPerson" | |
| class="form-control @(showErrorMessageforUploadingjobsAsCompany && !IsValidEmailForCompanyJobs(job.PositionContactPerson) ? "shake error" : "")" | |
| @bind="job.PositionContactPerson" | |
| placeholder="[email protected]" /> | |
| @if (showErrorMessageforUploadingjobsAsCompany && !IsValidEmailForCompanyJobs(job.PositionContactPerson)) | |
| { | |
| <small style="color: red;">Παρακαλώ εισάγετε ένα έγκυρο email.</small> | |
| } | |
| </div> | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="PositionContactTelephonePerson"> | |
| Τηλέφωνο Υπευθύνου | |
| <span style="font-style: italic; color: gray;"> (Προαιρετικό)</span> | |
| </label> | |
| <div class="input-group"> | |
| <div class="input-group-prepend"> | |
| <span class="input-group-textfortelephone">+30</span> | |
| </div> | |
| <input type="tel" id="PositionContactTelephonePerson" | |
| class="form-control @(showErrorMessageforUploadingjobsAsCompany && !IsValidPhoneNumber(job.PositionContactTelephonePerson) ? "shake error" : "")" | |
| @bind="job.PositionContactTelephonePerson" | |
| @oninput="OnPhoneNumberInput" | |
| placeholder="Τηλέφωνο Υπευθύνου" | |
| maxlength="10" /> | |
| </div> | |
| @if (showErrorMessageforUploadingjobsAsCompany && !IsValidPhoneNumber(job.PositionContactTelephonePerson) && !string.IsNullOrWhiteSpace(job.PositionContactTelephonePerson)) | |
| { | |
| <small style="color: red;">Παρακαλώ εισάγετε έγκυρο αριθμό τηλεφώνου...</small> | |
| } | |
| </div> | |
| </div> | |
| <!-- Address --> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="PositionAddressLocation">Διεύθυνση Εργασίας<span style="font-style: italic; color: gray;"> (Προαιρετικό)</span></label> | |
| <div class="input-group"> | |
| <input type="tel" id="PositionAddressLocation" | |
| class="form-control @(showErrorMessageforUploadingjobsAsCompany && string.IsNullOrWhiteSpace(job.PositionAddressLocation) ? "" : "")" | |
| @bind="job.PositionAddressLocation"/> | |
| </div> | |
| </div> | |
| </div | |
| <!-- Region Dropdown --> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyInternshipPerifereiaLocation"> | |
| <strong>Περιφέρεια</strong> | |
| <span style="color: red;">*</span> | |
| </label> | |
| <div class="input-group"> | |
| <select id="CompanyInternshipPerifereiaLocation" class="form-control @(showErrorMessageforUploadingjobsAsCompany && string.IsNullOrWhiteSpace(job.PositionPerifereiaLocation) ? "shake error" : "")" @bind="job.PositionPerifereiaLocation"> | |
| <option value="">-- Επιλέξτε Περιφέρεια --</option> | |
| @foreach (var region in Regions) | |
| { | |
| <option value="@region">@region</option> | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| @if (showErrorMessageforUploadingjobsAsCompany && string.IsNullOrWhiteSpace(job.PositionPerifereiaLocation)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται Επιλογή Περιφέρειας.</div> | |
| } | |
| </div> | |
| <!-- Town Dropdown --> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyInternshipDimosLocation"> | |
| <strong>Δήμος</strong> | |
| <span style="color: red;">*</span> | |
| </label> | |
| <div class="input-group"> | |
| <select id="CompanyInternshipDimosLocation" class="form-control @(showErrorMessageforUploadingjobsAsCompany && string.IsNullOrWhiteSpace(job.PositionDimosLocation) ? "shake error" : "")" @bind="job.PositionDimosLocation"> | |
| <option value="">-- Επιλέξτε Δήμο --</option> | |
| @foreach (var town in GetTownsForRegion(job.PositionPerifereiaLocation)) | |
| { | |
| <option value="@town">@town</option> | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="positionPostalCode"> | |
| Ταχυδρομικός Κώδικας | |
| <span style="font-style: italic; color: gray;"> (Προαιρετικό)</span> | |
| </label> | |
| <input type="text" id="positionPostalCode" | |
| class="form-control @(showErrorMessageforPostalCode ? "shake error" : "")" | |
| @bind="job.PositionPostalCodeLocation" | |
| @oninput="ValidatePostalCode" | |
| placeholder="Π.χ. 12345" | |
| maxlength="5" | |
| pattern="\d{5}" /> | |
| @if (showErrorMessageforPostalCode) | |
| { | |
| <small style="color: red;">Παρακαλώ εισάγετε έναν έγκυρο Ταχυδρομικό Κώδικα (5 ψηφία).</small> | |
| } | |
| </div> | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label><strong>Δυνατότητα Μετακίνησης</strong> <span style="color: red;">*</span> <span style="font-style: italic; color: gray;"> (Προσφέρεται από την εταιρία)</span></label> | |
| <div class="form-check"> | |
| <input type="radio" id="PositionTransportOfferYes" class="form-check-input" name="PositionTransportOffer" value="true" checked="@(job.PositionTransportOffer ? "checked" : "")" @onchange="() => UpdateTransportOffer(true)" /> | |
| <label for="PositionTransportOfferYes" class="form-check-label">Ναι</label> | |
| </div> | |
| <div class="form-check"> | |
| <input type="radio" id="PositionTransportOfferNo" class="form-check-input" name="PositionTransportOffer" value="false" checked="@(job.PositionTransportOffer ? "" : "checked")" @onchange="() => UpdateTransportOffer(false)" /> | |
| <label for="PositionTransportOfferNo" class="form-check-label">Όχι</label> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <div style="display: flex; align-items: center; gap: 12px; margin-bottom: 12px; flex-wrap: wrap;"> | |
| <label style="margin: 0; display: flex; align-items: center; gap: 4px;"> | |
| <strong>Τομείς Θέσης</strong> | |
| <span style="color: red;">*</span> | |
| </label> | |
| <button type="button" | |
| @onclick="ToggleCheckboxesForCompanyJob" | |
| class="toggle-all-areas-btn @(showErrorMessageforUploadingjobsAsCompany && string.IsNullOrWhiteSpace(job.PositionAreas) ? "shake error" : "")" | |
| style="border: 1px solid #1565c0; background: white; border-radius: 6px; padding: 4px 10px; cursor: pointer; display: inline-flex; align-items: center; gap: 6px; color: #1565c0; font-size: 0.85em; transition: all 0.2s;"> | |
| <span>👆</span> | |
| <span>Προβολή τομέων</span> | |
| </button> | |
| </div> | |
| @if (showCheckboxesForCompanyJob) | |
| { | |
| <div id="toggleCheckboxes" class="checkbox-container"> | |
| @if (Areas == null || !Areas.Any()) | |
| { | |
| <p>Φορτώνει...</p> | |
| } | |
| else | |
| { | |
| @foreach (var area in Areas) | |
| { | |
| <div class="area-container" style="margin-bottom: 8px; border: 2px solid #1565c0; border-radius: 6px; padding: 8px; background-color: #f8f9fa;"> | |
| <div class="form-check area-header" style="display: flex; align-items: center; gap: 8px;"> | |
| <input type="checkbox" | |
| id="[email protected]" | |
| class="form-check-input" | |
| @onchange="(e) => OnAreaCheckedChangedForCompanyJob(e, area)" | |
| checked="@IsAreaSelectedForCompanyJob(area)" /> | |
| <label class="form-check-label area-label @(showErrorMessageforUploadingjobsAsCompany && string.IsNullOrWhiteSpace(job.PositionAreas) ? "shake error" : "")" | |
| for="[email protected]" | |
| style="cursor: pointer; font-weight: bold; flex-grow: 1; color: #1565c0;"> | |
| @area.AreaName | |
| </label> | |
| <button type="button" | |
| @onclick="@(() => ToggleSubFieldsForCompanyJob(area))" | |
| @onclick:stopPropagation="true" | |
| class="expand-btn" | |
| style="border: 1px solid #1565c0; background: white; border-radius: 4px; padding: 4px 8px; cursor: pointer; display: flex; align-items: center; gap: 4px; font-size: 0.8em; color: #1565c0; transition: all 0.2s;"> | |
| <span>Υποτομείς</span> | |
| <span class="expand-icon" style="font-size: 10px; transition: transform 0.2s; transform: @(ExpandedAreasForCompanyJob.Contains(area.Id) ? "rotate(90deg)" : "rotate(0deg)")">▶</span> | |
| </button> | |
| </div> | |
| @if (ExpandedAreasForCompanyJob.Contains(area.Id)) | |
| { | |
| <div class="subfields-container" style="margin-top: 12px; margin-left: 28px; padding: 12px; background: white; border: 1px solid #e0e0e0; border-radius: 4px;"> | |
| <div style="font-size: 0.85em; color: #666; margin-bottom: 8px; font-weight: 500;"> | |
| Επιλέξτε υποτομείς: | |
| </div> | |
| @if (!string.IsNullOrEmpty(area.AreaSubFields)) | |
| { | |
| var subFields = area.AreaSubFields.Split(',').Select(s => s.Trim()).ToList(); | |
| @foreach (var subField in subFields) | |
| { | |
| <div class="form-check subfield-checkbox" style="margin-bottom: 6px;"> | |
| <input type="checkbox" | |
| id="subfield_@(area.Id)_@(subField)" | |
| class="form-check-input" | |
| @onchange="(e) => OnSubFieldCheckedChangedForCompanyJob(e, area, subField)" | |
| checked="@IsSubFieldSelectedForCompanyJob(area, subField)" /> | |
| <label class="form-check-label" for="subfield_@(area.Id)_@(subField)" style="font-weight: normal; font-size: 0.9em;"> | |
| @subField | |
| </label> | |
| </div> | |
| } | |
| } | |
| </div> | |
| } | |
| </div> | |
| } | |
| } | |
| </div> | |
| } | |
| </div> | |
| @if (showErrorMessageforUploadingjobsAsCompany && !HasAnySelectionForCompanyJob()) | |
| { | |
| <div class="text-danger mt-1">Πρέπει να επιλέξετε τουλάχιστον 1 Τομέα Θέσης ή Υποτομέα.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyJobActivePeriod"><strong>Διαθέσιμη Από</strong> <span style="color: red;">*</span></label> | |
| <input type="date" id="CompanyJobActivePeriod" | |
| class="form-control @(showErrorMessageforUploadingjobsAsCompany && ( job.PositionActivePeriod.Date == DateTime.Today) ? "shake error" : "")" | |
| @bind="job.PositionActivePeriod" /> | |
| </div> | |
| @if (showErrorMessageforUploadingjobsAsCompany && job.PositionActivePeriod.Date <= DateTime.Today) | |
| { | |
| <div class="text-danger mt-1">Η ημερομηνία πρέπει να είναι μεταγενέστερη της σημερινής ημερομηνίας.</div> | |
| } | |
| </div> | |
| @* | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="positionTitle">Κατάσταση Θέσης</label> | |
| <input type="text" id="positionTitle" class="form-control" @bind="job.PositionStatus" /> | |
| </div> | |
| </div> | |
| *@ | |
| <div class="row mb-3"> | |
| <div class="col-md-4 position-relative"> | |
| <label for="CompanyJobDescription"><strong>Περιγραφή Θέσης</strong> <span style="color: red;">*</span></label> | |
| <textarea id="CompanyJobDescription" class="form-control @(showErrorMessageforUploadingjobsAsCompany && string.IsNullOrWhiteSpace(job.PositionDescription) ? "shake error" : "")" | |
| @bind="job.PositionDescription" | |
| @oninput="CheckCharacterLimitInJobDescriptionUploadAsCompany" | |
| maxlength="1000" | |
| placeholder="Περιγραφή Θέσης"></textarea> | |
| <small class="character-limit light-cadetblue-text">@remainingCharactersInJobDescriptionUploadAsCompany/1000</small> | |
| </div> | |
| @if (showErrorMessageforUploadingjobsAsCompany && string.IsNullOrWhiteSpace(job.PositionDescription)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται Περιγραφή της Θέσης Εργασίας.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="positionAttachment">Συνημμένο Αρχείο Θέσης Εργασίας | |
| <span style="font-style: italic; color: gray;"> (Προαιρετικό)</span> | |
| </label> | |
| <InputFile id="positionAttachment" class="form-control" OnChange="HandleFileSelected" /> | |
| </div> | |
| </div> | |
| <!-- Save Buttons --> | |
| <div class="row mb-3"> | |
| <div class="col-md-12"> | |
| <button class="modern-button" style="background-color: #2d3748; color: white; display: inline-flex; align-items: center;" @onclick="HandleTemporarySaveJobAsCompany"> | |
| <i class="fa-regular fa-floppy-disk" style="margin-right: 8px;"></i>Προσωρινή Αποθήκευση Θέσης Εργασίας | |
| </button> | |
| <button class="modern-button" style="background-color: #2d3748; color: white; display: inline-flex; align-items: center;" @onclick="HandlePublishSaveJobAsCompany"> | |
| <i class="fa-solid fa-floppy-disk" style="margin-right: 8px;"></i>Δημοσίευση Θέσης Εργασίας | |
| </button> | |
| </div> | |
| </div> | |
| <!-- Loading Modal for Company Job --> | |
| @if (showLoadingModalForJob) | |
| { | |
| <div class="loading-modal"> | |
| <div class="loading-modal-content"> | |
| <div class="loading-spinner"></div> | |
| <p>Αποθήκευση Θέσης Εργασίας...</p> | |
| <div class="progress-bar"> | |
| <div class="progress-bar-fill" style="width: @loadingProgress%"></div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| @if (showSuccessMessage) | |
| { | |
| <div class="good-message"> | |
| Η Νέα Θέση Εργασίας υποβλήθηκε με επιτυχία! | |
| </div> | |
| } | |
| @if (showErrorMessageforUploadingjobsAsCompany) | |
| { | |
| <div class="alert alert-danger" role="alert"> | |
| Συμπληρώστε Όλα Τα Υποχρεωτικά Πεδία και Προσπαθήστε Ξανά | |
| </div> | |
| } | |
| } | |
| @*--------------------------------------------------------------------------- ΕΝΕΡΓΕΣ ΘΕΣΕΙΣ ΕΡΓΑΣΙΑΣ COMPANY -----------------------------------------------------------------------------*@ | |
| <div class="mb-3 row-dark-gray"> | |
| <div class="d-flex justify-content-between align-items-center" @onclick="ToggleFormVisibilityToShowMyActiveJobsAsCompany" style="cursor: pointer;"> | |
| <label class="form-label" style="color: #FFF8DC;"> | |
| @if (isLoadingJobsHistory) | |
| { | |
| <span> | |
| <i class="fas fa-spinner fa-spin me-2"></i> | |
| Φόρτωση Ιστορικού... | |
| </span> | |
| } | |
| else | |
| { | |
| <span>• Ιστορικό Θέσεων Εργασίας •</span> | |
| } | |
| </label> | |
| <button class="btn btn-link" @onclick="ToggleFormVisibilityToShowMyActiveJobsAsCompany" @onclick:stopPropagation="true"> | |
| @if (isForm2Visible && !isLoadingJobsHistory) | |
| { | |
| <span>−</span> <!-- Minus sign --> | |
| } | |
| else if (!isLoadingJobsHistory) | |
| { | |
| <span>+</span> <!-- Plus sign --> | |
| } | |
| </button> | |
| </div> | |
| </div> | |
| @if (isForm2Visible && !isLoadingJobsHistory) | |
| { | |
| <div class="col-md-2"> | |
| <label for="statusFilterForJobs" style="color: #2d3748;"><strong>Φίλτρο Εμφάνισης</strong></label> | |
| <div class="input-group"> | |
| <select id="statusFilterForJobs" class="form-control form-control-sm" @bind="selectedStatusFilterForJobs"> | |
| <option value="Όλα">Όλες</option> | |
| <option value="Δημοσιευμένη">Δημοσιευμένες</option> | |
| <option value="Μη Δημοσιευμένη">Μη Δημοσιευμένες</option> | |
| <option value="Αποσυρμένη">Αποσυρμένες</option> | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-md-2"> | |
| <label style="color: #2d3748;"><strong>Αποτελέσματα ανά Σελίδα</strong></label> | |
| <div class="input-group" style="max-width: 65px;"> | |
| <select class="form-control form-control-sm" @onchange="OnPageSizeChange_SeeMyUploadedJobsAsCompany"> | |
| @foreach (var option in pageSizeOptions_SeeMyUploadedJobsAsCompany) | |
| { | |
| <option value="@option" selected="@(JobsPerPage == option)">@option</option> | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <br/> | |
| <div class="col-md-2"> | |
| @if (selectedStatusFilterForJobs == "Όλα") | |
| { | |
| <span><strong>Σύνολο: </strong>@totalCountJobs</span> | |
| } | |
| else if (selectedStatusFilterForJobs == "Δημοσιευμένη") | |
| { | |
| <span><strong>Σύνολο: </strong>@publishedCountJobs</span> | |
| } | |
| else if (selectedStatusFilterForJobs == "Μη Δημοσιευμένη") | |
| { | |
| <span><strong>Σύνολο: </strong>@unpublishedCountJobs</span> | |
| } | |
| else if (selectedStatusFilterForJobs == "Αποσυρμένη") | |
| { | |
| <span><strong>Σύνολο: </strong>@withdrawnCountJobs</span> | |
| } | |
| </div> | |
| @if (jobs != null && jobs.Any()) | |
| { | |
| <table class="table"> | |
| <thead> | |
| <tr style="background-color: lightgray; border: 2px solid black;"> | |
| <th style="border: 2px solid black;"><i class="fa-solid fa-key fa-sm" style="color: #0d6efd;"></i> Κωδικός Θέσης</th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-font fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Τίτλος | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-arrows-up-down fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Κατάσταση Θέσης | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-calendar-days fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Δημιουργία Θέσης | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-hand fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ενέργειες | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-paperclip fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Αρχείο | |
| </th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| @foreach (var job in GetPaginatedJobs().Where(j => selectedStatusFilterForJobs == "Όλα" || j.PositionStatus == selectedStatusFilterForJobs)) | |
| { | |
| <tr class="job-position-frame @(job.PositionStatus == "Δημοσιευμένη" ? "jobstatus-dimosieumeni" : (job.PositionStatus == "Μη Δημοσιευμένη" ? "jobstatus-midimosieumeni" : "jobstatus-aposirmeni"))"> | |
| <td style="color: #2d3748;"> | |
| @job.RNGForPositionUploaded_HashedAsUniqueID | |
| </td> | |
| <td @onclick="() => ToggleJobsExpanded(job.RNGForPositionUploaded)" style="cursor: pointer;" title="Κλικ για εμφάνιση λεπτομερειών"> | |
| @job.PositionTitle | |
| </td> | |
| <td>@job.PositionStatus</td> | |
| <td>@job.UploadDateTime</td> | |
| <td> | |
| <div class="d-flex gap-1"> | |
| <button class="btn btn-action btn-delete" @onclick="() => DeleteJobPosition(job.Id)" title="Οριστική Διαγραφή Θέσης"> | |
| <i class="fas fa-trash icon-button"></i> | |
| </button> | |
| <!-- Loading Modal for Delete Job Position --> | |
| @if (showLoadingModalForDeleteJob) | |
| { | |
| <div class="loading-modal"> | |
| <div class="loading-modal-content"> | |
| <div class="loading-spinner"></div> | |
| <p>Διαγραφή Θέσης Εργασίας...</p> | |
| <div class="progress-bar"> | |
| <div class="progress-bar-fill" style="width: @loadingProgress%"></div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| <button class="btn btn-action btn-view" @onclick="() => ShowJobDetails(job)" title="Εμφάνιση Λεπτομερειών Θέσης"> | |
| <i class="fas fa-eye icon-button"></i> | |
| </button> | |
| @if (job.PositionStatus != "Δημοσιευμένη") | |
| { | |
| <button class="btn btn-action btn-edit" @onclick="() => EditJobDetails(job)" title="Επεξεργασία Θέσης"> | |
| <i class="fas fa-pencil-alt icon-button"></i> | |
| </button> | |
| <button class="btn btn-action btn-publish" @onclick='async () => await UpdateJobStatusAsCompany(job.Id, "Δημοσιευμένη")' title="Δημοσίευση Θέσης"> | |
| <i class="fas fa-arrow-up icon-button"></i> | |
| </button> | |
| } | |
| else | |
| { | |
| <button class="btn btn-action btn-withdraw" @onclick='async () => await UpdateJobStatusAsCompany(job.Id, "Αποσυρμένη")' title="Απόσυρση Θέσης"> | |
| <i class="fas fa-times icon-button"></i> | |
| </button> | |
| } | |
| @if (job.PositionStatus != "Μη Δημοσιευμένη") | |
| { | |
| <button class="btn btn-action btn-unpublish" @onclick='() => ChangeJobStatusToUnpublished(job.Id)' title="Αποδημοσίευση Θέσης"> | |
| <i class="fas fa-arrow-down icon-button"></i> | |
| </button> | |
| } | |
| <button class="btn btn-action btn-applicants" @onclick="() => ToggleJobsExpanded(job.RNGForPositionUploaded)" title="Εμφάνιση Αιτούντων Θέσης" disabled="@isLoadingJobApplicants"> | |
| @if (isLoadingJobApplicants && loadingJobPositionId == job.RNGForPositionUploaded) | |
| { | |
| <i class="fas fa-spinner fa-spin"></i> | |
| } | |
| else | |
| { | |
| <i class="fa-solid fa-graduation-cap icon-button"></i> | |
| } | |
| </button> | |
| </div> | |
| </td> | |
| <td> | |
| @if (job.PositionAttachment != null && job.PositionAttachment.Length > 0) | |
| { | |
| <div style="display: flex; align-items: center;"> | |
| <button class="btn btn-action btn-download" @onclick="() => DownloadAttachmentForCompanyJobs(job.Id)" title="Λήψη Αρχείου"> | |
| <i class="fas fa-download icon-button"></i> | |
| </button> | |
| </div> | |
| } | |
| else | |
| { | |
| <span style="display: block; text-align: center; font-weight: bold; font-style: italic;"> | |
| Δεν Διατίθεται | |
| </span> | |
| } | |
| </td> | |
| </tr> | |
| @if (expandedJobs.ContainsKey(job.RNGForPositionUploaded) && expandedJobs[job.RNGForPositionUploaded]) | |
| { | |
| <br /> | |
| <tr> | |
| <td colspan="9" style="padding: 0;"> | |
| <div style="display: flex; justify-content: space-between; align-items: center; height: 24px; line-height: 24px; width: 100%;"> | |
| <i class="fa-solid fa-graduation-cap" style="font-size: 18px; color: #0d6efd;"></i> | |
| <label class="form-label" style="color: #0d6efd; font-weight: bold; font-size: 18px; margin: 0;">Λεπτομέρειες Αιτούντων</label> | |
| <i class="fa-solid fa-graduation-cap" style="font-size: 18px; color: #0d6efd;"></i> | |
| </div> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td colspan="6"> | |
| <table class="table table-sm"> | |
| <thead> | |
| <tr style="background-color: #f5f5f5; border: 1px solid black;"> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-user fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Προφίλ | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-signature fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Όνομα | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-signature fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Επώνυμο | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-calendar-plus fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ημερομηνία Αίτησης | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-calendar-plus fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Έτος Φοίτησης | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-phone fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Τηλεφωνο | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-comments fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Επικοινωνία | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-hand fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ενέργεια | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-hourglass-half fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Κατάσταση Αίτησης | |
| </th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| @if (studentDataCache == null) | |
| { | |
| <!-- Loading state --> | |
| <tr> | |
| <td colspan="9" class="text-center"> | |
| <div class="spinner-border text-primary" role="status"> | |
| <span class="sr-only">Φόρτωση...</span> | |
| </div> | |
| <p>Φόρτωση δεδομένων φοιτητών...</p> | |
| </td> | |
| </tr> | |
| } | |
| else if (jobApplicantsMap.ContainsKey(job.RNGForPositionUploaded) && jobApplicantsMap[job.RNGForPositionUploaded].Any()) | |
| { | |
| @foreach (var applicant in jobApplicantsMap[job.RNGForPositionUploaded]) | |
| { | |
| var student = studentDataCache.TryGetValue(applicant.StudentEmailAppliedForCompanyJob, out var s) ? s : null; | |
| var status = applicant.CompanyPositionStatusAppliedAtTheStudentSide ?? "N/A"; | |
| var companyStatus = applicant.CompanyPositionStatusAppliedAtTheCompanySide ?? "N/A"; | |
| <tr style="background-color: @(companyStatus == "Επιτυχής" ? "lightgreen" : | |
| companyStatus == "Απορρίφθηκε" ? "lightcoral" : | |
| companyStatus == "Απορρίφθηκε (Απόσυρση Θέσεως Από Εταιρία)" ? "coral" : | |
| companyStatus == "Αποσύρθηκε από τον φοιτητή" ? "lightyellow" : "transparent")"> | |
| <td> | |
| <a href="#" @onclick="() => ShowStudentDetailsInNameAsHyperlink(applicant.StudentUniqueIDAppliedForCompanyJob)" | |
| title="Προφίλ Υποψήφιου Σπουδαστή"> | |
| <i class="fas fa-eye icon-button text-dark"></i> | |
| @if (student == null) | |
| { | |
| <span class="badge badge-warning ml-1">Δε βρέθηκε</span> | |
| } | |
| </a> | |
| </td> | |
| <td>@(student?.Name ?? "Δε βρέθηκε")</td> | |
| <td>@(student?.Surname ?? "Δε βρέθηκε")</td> | |
| <td>@applicant.DateTimeStudentAppliedForCompanyJob.ToString("dd/MM/yyyy HH:mm")</td> | |
| <td>@(student?.StudyYear ?? "-")</td> | |
| <td>@(student?.Telephone ?? "-")</td> | |
| <td class="text-center"> | |
| @applicant.StudentEmailAppliedForCompanyJob | |
| <a href="mailto:@applicant.StudentEmailAppliedForCompanyJob" title="Αποστολή Email"> | |
| <i class="fas fa-envelope"></i> | |
| </a> | |
| </td> | |
| <td> | |
| @if (status == "Σε Επεξεργασία") | |
| { | |
| <div style="display: flex; gap: 10px; justify-content: center;"> | |
| <span @onclick="() => ConfirmAndAcceptJob(applicant.RNGForCompanyJobApplied, applicant.StudentUniqueIDAppliedForCompanyJob)" | |
| title="Αποδοχή Αίτησης" style="cursor: pointer;"> | |
| <i class="fas fa-check action-icon accept-icon"></i> | |
| </span> | |
| <span @onclick="() => ConfirmAndRejectJob(applicant.RNGForCompanyJobApplied, applicant.StudentUniqueIDAppliedForCompanyJob)" | |
| title="Απόρριψη Αίτησης" style="cursor: pointer;"> | |
| <i class="fas fa-times action-icon reject-icon"></i> | |
| </span> | |
| </div> | |
| } | |
| else | |
| { | |
| <span class="text">@status</span> | |
| } | |
| </td> | |
| <td> | |
| @if (companyStatus == "Επιτυχής") | |
| { | |
| <span style="color: green; font-weight: bold;">Έχει γίνει Αποδοχή</span> | |
| } | |
| else if (companyStatus == "Απορρίφθηκε") | |
| { | |
| <span style="color: red; font-weight: bold;">Έχει Απορριφθεί</span> | |
| } | |
| else | |
| { | |
| <span>@companyStatus</span> | |
| } | |
| </td> | |
| </tr> | |
| } | |
| } | |
| else | |
| { | |
| <tr> | |
| <td colspan="9" class="text-center text-danger"> | |
| <strong>Καμία Αίτηση για αυτήν την Θέση Εργασίας ακόμη</strong> | |
| </td> | |
| </tr> | |
| } | |
| </tbody> | |
| </table> | |
| </td> | |
| </tr> | |
| } | |
| } | |
| </tbody> | |
| </table> | |
| <br/> | |
| <!-- Pagination Controls --> | |
| <div class="d-flex justify-content-center align-items-center mt-3 gap-1"> | |
| <!-- First Page (<<) --> | |
| <span class="pagination-item @(currentPageForJobs == 1 ? "disabled" : "")" | |
| @onclick="@(() => GoToFirstPageForJobs())"> | |
| << | |
| </span> | |
| <!-- Previous Page (<) --> | |
| <span class="pagination-item @(currentPageForJobs == 1 ? "disabled" : "")" | |
| @onclick="@(() => PreviousPageForJobs())"> | |
| < | |
| </span> | |
| <!-- Page Numbers --> | |
| @foreach (var pageNum in GetVisiblePagesForJobs()) | |
| { | |
| @if (pageNum == -1) | |
| { | |
| <span class="pagination-ellipsis">...</span> | |
| } | |
| else | |
| { | |
| <span class="pagination-item @(pageNum == currentPageForJobs ? "active" : "")" | |
| @onclick="@(() => GoToPageForJobs(pageNum))"> | |
| @pageNum | |
| </span> | |
| } | |
| } | |
| <!-- Next Page (>) --> | |
| <span class="pagination-item @(currentPageForJobs == totalPagesForJobs ? "disabled" : "")" | |
| @onclick="@(() => NextPageForJobs())"> | |
| > | |
| </span> | |
| <!-- Last Page (>>) --> | |
| <span class="pagination-item @(currentPageForJobs == totalPagesForJobs ? "disabled" : "")" | |
| @onclick="@(() => GoToLastPageForJobs())"> | |
| >> | |
| </span> | |
| <!-- Page counter --> | |
| <span class="ms-3">Σελίδα @currentPageForJobs από @totalPagesForJobs</span> | |
| </div> | |
| <br/> | |
| <br/> | |
| } | |
| } | |
| </div> | |
| </div> | |
| @if (isModalVisibleForJobs) | |
| { | |
| <div class="modal fade show d-block" tabindex="-1" role="dialog" style="background-color: rgba(0,0,0,0.5);"> | |
| <div class="modal-dialog modal-dialog-centered" role="document"> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title"> | |
| <span style="color: #007BFF;">@currentJob.PositionTitle</span> | |
| </h5> | |
| <button type="button" class="close" @onclick="CloseModalForJobs"> | |
| <span aria-hidden="true">×</span> | |
| </button> | |
| </div> | |
| <div class="modal-body"> | |
| @* | |
| <div class="form-group"> | |
| <label for="viewTitle"><strong>Τίτλος</strong></label> | |
| <input type="text" id="viewTitle" class="form-control" value="@currentJob.PositionTitle" readonly /> | |
| </div> | |
| *@ | |
| <div class="form-group"> | |
| <label for="viewDescription"><strong>Περιγραφή</strong></label> | |
| <textarea id="viewDescription" class="form-control" readonly>@currentJob.PositionDescription</textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewType"><strong>Τύπος</strong></label> | |
| <input type="text" id="viewType" class="form-control" | |
| value="@(currentJob.PositionType == "Full-Time" ? "Αορίστου Χρόνου" : | |
| currentJob.PositionType == "Part-Time" ? "Περιορισμένου Χρόνου" : | |
| currentJob.PositionType == "Simvasi-Ergou" ? "Σύμβαση Έργου" : "")" | |
| readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewForeas"><strong>Φορέας</strong></label> | |
| <input type="text" id="viewForeas" class="form-control" value="@currentJob.PositionForeas" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Ξεκινάει Από</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="far fa-calendar-alt" style="color: #5F9EA0; margin-right: 8px;"></i> | |
| <span>@currentJob.PositionActivePeriod.ToString("yyyy-MM-dd")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Email Επικοινωνίας</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-envelope" style="color: #5F9EA0; margin-right: 8px;"></i> | |
| <span>@currentJob.PositionContactPerson</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewPerifereiaLocation"><strong>Περιφέρεια</strong></label> | |
| <input type="text" id="viewPerifereiaLocation" class="form-control" value="@currentJob.PositionPerifereiaLocation" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewDimosLocation"><strong>Δήμος</strong></label> | |
| <input type="text" id="viewDimosLocation" class="form-control" value="@currentJob.PositionDimosLocation" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewPostalCodeLocation"><strong>Ταχ. Κώδικας</strong></label> | |
| <input type="text" id="viewPostalCodeLocation" class="form-control" value="@currentJob.PositionPostalCodeLocation" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Προσφορά Μεταφορικού Μέσου</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto; | |
| @(currentJob.PositionTransportOffer ? "color: #28a745;" : "color: #dc3545;")"> | |
| <i class="fas fa-car" style="margin-right: 8px;"></i> | |
| <span>@(currentJob.PositionTransportOffer ? "Ναι" : "Όχι")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewAreas"><strong>Τομείς</strong></label> | |
| <textarea id="viewAreas" class="form-control" rows="3" readonly>@currentJob.PositionAreas</textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewStatus"><strong>Κατάσταση</strong></label> | |
| <select id="viewStatus" class="form-control" disabled> | |
| <option value="Δημοσιευμένη" selected="@(currentJob.PositionStatus == "Δημοσιευμένη")">Δημοσιευμένη</option> | |
| <option value="Μη Δημοσιευμένη" selected="@(currentJob.PositionStatus == "Μη Δημοσιευμένη")">Μη Δημοσιευμένη</option> | |
| <option value="Αποσυρμένη" selected="@(currentJob.PositionStatus == "Αποσυρμένη")">Αποσυρμένη</option> | |
| </select> | |
| </div> | |
| </div> | |
| <div class="modal-footer"> | |
| <button type="button" class="btn btn-secondary" @onclick="CloseModalForJobs">Κλείσιμο</button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| @*MODAL FOR EDIT COMPANY JOBS*@ | |
| @if (isEditPopupVisibleForJobs) | |
| { | |
| <div class="modal fade show" style="display: block;" tabindex="-1" role="dialog" aria-modal="true"> | |
| <div class="modal-dialog modal-lg" role="document"> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title" style="color: #007BFF;">@selectedJob.PositionTitle</h5> | |
| <button type="button" class="close" @onclick="CloseEditPopupForJobs">×</button> | |
| </div> | |
| <div class="modal-body"> | |
| <div class="form-group"> | |
| <label for="editTitle"><strong>Τίτλος</strong></label> | |
| <input type="text" id="editTitle" class="form-control" @bind="selectedJob.PositionTitle" /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editDescription"><strong>Περιγραφή</strong></label> | |
| <textarea id="editDescription" class="form-control" @bind="selectedJob.PositionDescription"></textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editType"><strong>Τύπος</strong></label> | |
| <div class="input-group"> | |
| <select id="editType" class="form-control @(showErrorMessage && string.IsNullOrWhiteSpace(selectedJob.PositionType) ? "shake error" : "")" @bind="selectedJob.PositionType"> | |
| <option value="Full-Time">Αορίστου Χρόνου</option> | |
| <option value="Part-Time">Περιορισμένου Χρόνου</option> | |
| <option value="Simvasi-Ergou">Σύμβαση Έργου</option> | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editForeas"><strong>Φορέας</strong></label> | |
| <div class="input-group"> | |
| <select id="editForeas" class="form-control @(showErrorMessage && string.IsNullOrWhiteSpace(selectedJob.PositionForeas) ? "shake error" : "")" @bind="selectedJob.PositionForeas"> | |
| @foreach (var foreas in ForeasType) | |
| { | |
| <option value="@foreas">@foreas</option> | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editContactPerson"><strong>Υπεύθυνος Επικοινωνίας</strong></label> | |
| <input type="text" id="editContactPerson" class="form-control" @bind="selectedJob.PositionContactPerson" /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editPerifereiaLocationForInternship"><strong>Περιφέρεια</strong></label> | |
| <div class="input-group"> | |
| <select id="editPerifereiaLocationForInternship" class="form-control @(showErrorMessage && string.IsNullOrWhiteSpace(selectedJob.PositionPerifereiaLocation) ? "shake error" : "")" @bind="selectedJob.PositionPerifereiaLocation"> | |
| <option value="">-- Επιλέξτε Περιφέρεια --</option> | |
| @foreach (var region in Regions) | |
| { | |
| <option value="@region">@region</option> | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editDimosLocation"><strong>Δήμος</strong></label> | |
| <div class="input-group"> | |
| <select id="editDimosLocation" class="form-control @(showErrorMessage && string.IsNullOrWhiteSpace(selectedJob.PositionDimosLocation) ? "shake error" : "")" @bind="selectedJob.PositionDimosLocation"> | |
| <option value="">-- Επιλέξτε Δήμο --</option> | |
| @if (!string.IsNullOrEmpty(selectedJob.PositionPerifereiaLocation) && RegionToTownsMap.ContainsKey(selectedJob.PositionPerifereiaLocation)) | |
| { | |
| foreach (var town in RegionToTownsMap[selectedJob.PositionPerifereiaLocation]) | |
| { | |
| <option value="@town">@town</option> | |
| } | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editPostalCodeLocation"><strong>Ταχυδρομικός Κώδικας</strong></label> | |
| <input type="text" id="editPostalCodeLocation" class="form-control" @bind="selectedJob.PositionPostalCodeLocation" /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editTransportOffer"><strong>Προσφορά Μεταφοράς</strong></label> | |
| <div> | |
| <input type="checkbox" id="editTransportOffer" class="form-check-input" @bind="selectedJob.PositionTransportOffer" /> | |
| <span class="ml-2">@(selectedJob.PositionTransportOffer ? "Ναι" : "Όχι")</span> | |
| </div> | |
| </div> | |
| <br/> | |
| <!-- UPDATED: Areas with Subfields --> | |
| <div class="form-group"> | |
| <label @onclick="ToggleCheckboxesForEditCompanyJob" style="cursor: pointer; display: flex; align-items: center;"> | |
| <strong>Τομείς Εργασίας</strong> | |
| <span style="color: #1565c0; font-size: 0.9em; margin-left: 8px; display: flex; align-items: center;"> | |
| <i class="fas @(showCheckboxesForEditCompanyJob ? "fa-chevron-up" : "fa-chevron-down")" style="margin-right: 4px;"></i> | |
| @(showCheckboxesForEditCompanyJob ? "Κλείσιμο" : "Άνοιγμα") | |
| </span> | |
| </label> | |
| @if (showCheckboxesForEditCompanyJob) | |
| { | |
| <div id="toggleCheckboxes" class="checkbox-container"> | |
| @foreach (var area in Areas) | |
| { | |
| <div class="area-container" style="margin-bottom: 8px; border: 2px solid #1565c0; border-radius: 4px; padding: 8px; background-color: #f8f9fa;"> | |
| <div class="form-check area-header"> | |
| <input type="checkbox" | |
| id="[email protected]" | |
| class="form-check-input" | |
| @onchange="(e) => OnAreaCheckedChangedForEditCompanyJob(e, area)" | |
| checked="@IsAreaSelectedForEditCompanyJob(area)" /> | |
| <label class="form-check-label area-label" | |
| for="[email protected]" | |
| @onclick="@(() => ToggleSubFieldsForEditCompanyJob(area))" | |
| @onclick:stopPropagation="true" | |
| style="cursor: pointer; font-weight: bold; display: flex; align-items: center; justify-content: space-between; width: 100%; color: #1565c0;"> | |
| @area.AreaName | |
| <span class="expand-icon" style="font-size: 10px; transition: transform 0.2s; margin-left: 8px;">▶</span> | |
| </label> | |
| </div> | |
| @if (ExpandedAreasForEditCompanyJob.Contains(area.Id)) | |
| { | |
| <div class="subfields-container" style="margin-top: 8px; margin-left: 20px; padding-left: 15px; border-left: 2px solid #1565c0;"> | |
| @if (!string.IsNullOrEmpty(area.AreaSubFields)) | |
| { | |
| var subFields = area.AreaSubFields.Split(',').Select(s => s.Trim()).ToList(); | |
| @foreach (var subField in subFields) | |
| { | |
| <div class="form-check subfield-checkbox" style="margin-bottom: 4px;"> | |
| <input type="checkbox" | |
| id="edit_subfield_@(area.Id)_@(subField)" | |
| class="form-check-input" | |
| @onchange="(e) => OnSubFieldCheckedChangedForEditCompanyJob(e, area, subField)" | |
| checked="@IsSubFieldSelectedForEditCompanyJob(area, subField)" /> | |
| <label class="form-check-label" for="edit_subfield_@(area.Id)_@(subField)" style="font-weight: normal; font-size: 0.9em;"> | |
| @subField | |
| </label> | |
| </div> | |
| } | |
| } | |
| </div> | |
| } | |
| </div> | |
| } | |
| </div> | |
| } | |
| </div> | |
| <br/> | |
| <div class="form-group"> | |
| <label for="editActivePeriod"><strong>Ξεκινάει Από</strong></label> | |
| <input type="date" id="editActivePeriod" class="form-control" @bind="selectedJob.PositionActivePeriod" /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editLastUpdate"><strong>Ημερομηνία Τελευταίας Ανανέωσης Θέσης</strong></label> | |
| <input type="date" id="editLastUpdate" class="form-control" @bind="selectedJob.UpdateDateTime" /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editJobAttachment"><strong>Αντικατάσταση Συνημμένου</strong></label> | |
| <InputFile OnChange="HandleFileUploadToEditCompanyJobAttachment" /> | |
| </div> | |
| </div> | |
| <div class="modal-footer"> | |
| <button type="button" class="btn btn-secondary" @onclick="CloseEditPopupForJobs">Ακύρωση</button> | |
| <button type="button" class="btn btn-primary" @onclick="SaveEditedJob">Αποθήκευση</button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| @*----------------------------------------------------------------------------------------------------------JOBS TAB COMPANIES END------------------------------------------------------------------------------------------------------------*@ | |
| @*----------------------------------------------------------------------------------------------------------INTERNSHIPS TAB COMPANIES START------------------------------------------------------------------------------------------------------------*@ | |
| <div class="tab-pane fade" id="internships" role="tabpanel" aria-labelledby="internships-tab"> | |
| <!-- ΔΗΜΙΟΥΡΓΙΑ ΠΡΑΚΤΙΚΉΣ ΑΣΚΗΣΗΣ ΩΣ COMPANY USER--> | |
| <div class="mb-3 row-dark-gray"> | |
| <div class="d-flex justify-content-between align-items-center" @onclick="ToggleFormVisibilityForUploadCompanyInternships" style="cursor: pointer;"> | |
| <label class="form-label" style="color: #FFF8DC;">• Δημιουργία Πρακτικής Άσκησης •</label> | |
| <button class="btn btn-link" @onclick="ToggleFormVisibilityForUploadCompanyInternships" @onclick:stopPropagation="true"> | |
| @if (isUploadCompanyInternshipsFormVisible) | |
| { | |
| <span>−</span> <!-- Minus sign --> | |
| } | |
| else | |
| { | |
| <span>+</span> <!-- Plus sign --> | |
| } | |
| </button> | |
| </div> | |
| </div> | |
| @if (isUploadCompanyInternshipsFormVisible) | |
| { | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="companyinternshipType"><strong>Τύπος Θέσης</strong><span style="color: red;"> *</span></label> | |
| <div class="input-group"> | |
| <select id="companyinternshipType" class="form-control @(showErrorMessage && string.IsNullOrWhiteSpace(companyInternship.CompanyInternshipType) ? "shake error" : "")" @bind="companyInternship.CompanyInternshipType"> | |
| <option value="">-- Επιλέξτε Τύπο Πρακτικής --</option> | |
| <option value="Full-Time">Πλήρης Απασχόλησης</option> | |
| <option value="Part-Time">Μερικής Απασχόλησης</option> | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| @if (showErrorMessage && string.IsNullOrWhiteSpace(companyInternship.CompanyInternshipType)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται επιλογή Τύπου Θέσης.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="companyinternshipESPA"><strong>Χρηματοδότηση</strong><span style="color: red;"> *</span></label> | |
| <div class="input-group"> | |
| <select id="companyinternshipESPA" class="form-control @(showErrorMessage && string.IsNullOrWhiteSpace(companyInternship.CompanyInternshipESPA) ? "shake error" : "")" @bind="companyInternship.CompanyInternshipESPA"> | |
| <option value="">-- Επιλέξτε Χρηματοδότηση --</option> | |
| <option value="ESPA-Funding">Μέσω ΕΣΠΑ</option> | |
| <option value="Same-Funding">Ιδίου Φορέα</option> | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| @if (showErrorMessage && string.IsNullOrWhiteSpace(companyInternship.CompanyInternshipESPA)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται επιλογή Τύπου Χρηματοδότησης.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyInternshipActivePeriod"><strong>Διαθέσιμη Από</strong><span style="color: red;"> *</span></label> | |
| <input type="date" id="CompanyInternshipActivePeriod" class="form-control @(showErrorMessage && companyInternship.CompanyInternshipActivePeriod.Date <= DateTime.Today ? "shake error" : "")" | |
| @bind="companyInternship.CompanyInternshipActivePeriod" /> | |
| </div> | |
| @if (showErrorMessage && companyInternship.CompanyInternshipActivePeriod.Date <= DateTime.Today) | |
| { | |
| <div class="text-danger mt-1">Η ημερομηνία πρέπει να είναι μεταγενέστερη της σημερινής ημερομηνίας.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyInternshipFinishEstimation"><strong>Ολοκλήρωση Μέχρι</strong><span style="color: red;"> *</span></label> | |
| <input type="date" id="CompanyInternshipFinishEstimation" class="form-control @(showErrorMessage && companyInternship.CompanyInternshipFinishEstimation.Date <= DateTime.Today ? "shake error" : "")" | |
| @bind="companyInternship.CompanyInternshipFinishEstimation" /> | |
| </div> | |
| @if (showErrorMessage && companyInternship.CompanyInternshipFinishEstimation.Date <= DateTime.Today) | |
| { | |
| <div class="text-danger mt-1">Η ημερομηνία λήξης πρέπει να είναι μεταγενέστερη της ημερομηνίας έναρξης</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4 position-relative"> | |
| <label for="positionTitle"><strong>Τίτλος Θέσης</strong><span style="color: red;"> *</span></label> | |
| <input type="text" id="positionTitle" class="form-control @(showErrorMessage && string.IsNullOrWhiteSpace(companyInternship.CompanyInternshipTitle) ? "shake error" : "")" @bind="companyInternship.CompanyInternshipTitle" @oninput="CheckCharacterLimitInInternshipFieldUploadAsCompany" maxlength="120" /> | |
| <small class="character-limit light-cadetblue-text">@remainingCharactersInInternshipFieldUploadAsCompany/120</small> | |
| </div> | |
| @if (showErrorMessage && string.IsNullOrWhiteSpace(companyInternship.CompanyInternshipTitle)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται Τίτλος Θέσης.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyInternshipContactPerson"><strong>Email Υπευθύνου</strong><span style="color: red;"> *</span></label> | |
| <input type="email" id="CompanyInternshipContactPerson" class="form-control @(showErrorMessage && string.IsNullOrWhiteSpace(companyInternship.CompanyInternshipContactPerson) ? "shake error" : "")" @bind="companyInternship.CompanyInternshipContactPerson" placeholder="[email protected]" /> | |
| </div> | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyInternshipContactTelephonePerson"> | |
| Τηλέφωνο Υπευθύνου | |
| <span style="font-style: italic; color: gray;"> (Προαιρετικό)</span> | |
| </label> | |
| <div class="input-group"> | |
| <div class="input-group-prepend"> | |
| <span class="input-group-textfortelephone">+30</span> | |
| </div> | |
| <input type="tel" id="CompanyInternshipContactTelephonePerson" | |
| class="form-control @(showErrorMessage && !IsValidPhoneNumber(companyInternship.CompanyInternshipContactTelephonePerson) ? "shake error" : "")" | |
| @bind="companyInternship.CompanyInternshipContactTelephonePerson" | |
| @oninput="OnCompanyCreateInternshipPhoneNumberInput" | |
| placeholder="Τηλέφωνο Υπευθύνου" | |
| maxlength="10" /> | |
| </div> | |
| @if (showErrorMessage && !IsValidPhoneNumber(companyInternship.CompanyInternshipContactTelephonePerson) && !string.IsNullOrWhiteSpace(companyInternship.CompanyInternshipContactTelephonePerson)) | |
| { | |
| <small style="color: red;">Παρακαλώ εισάγετε έγκυρο αριθμό τηλεφώνου...</small> | |
| } | |
| </div> | |
| </div> | |
| <!-- Region Dropdown --> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyInternshipPerifereiaLocation"><strong>Περιφέρεια</strong><span style="color: red;"> *</span></label> | |
| <div class="input-group"> | |
| <select id="CompanyInternshipPerifereiaLocation" class="form-control @(showErrorMessage && string.IsNullOrWhiteSpace(companyInternship.CompanyInternshipPerifereiaLocation) ? "shake error" : "")" @bind="companyInternship.CompanyInternshipPerifereiaLocation"> | |
| <option value="">-- Επιλέξτε Περιφέρεια --</option> | |
| @foreach (var region in Regions) | |
| { | |
| <option value="@region">@region</option> | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| @if (showErrorMessage && string.IsNullOrWhiteSpace(companyInternship.CompanyInternshipPerifereiaLocation)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται επιλογή Περιφέρειας.</div> | |
| } | |
| </div> | |
| <!-- Town Dropdown --> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyInternshipDimosLocation"><strong>Δήμος</strong><span style="color: red;"> *</span></label> | |
| <div class="input-group"> | |
| <select id="CompanyInternshipDimosLocation" class="form-control @(showErrorMessage && string.IsNullOrWhiteSpace(companyInternship.CompanyInternshipDimosLocation) ? "shake error" : "")" @bind="companyInternship.CompanyInternshipDimosLocation"> | |
| <option value="">-- Επιλέξτε Δήμο --</option> | |
| @foreach (var town in GetTownsForRegion(companyInternship.CompanyInternshipPerifereiaLocation)) | |
| { | |
| <option value="@town">@town</option> | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| @if (showErrorMessage && string.IsNullOrWhiteSpace(companyInternship.CompanyInternshipDimosLocation)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται επιλογή δήμου.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyInternshipPostalCodeLocation">Ταχυδρομικός Κώδικας Τοποθεσίας<span style="font-style: italic; color: gray;"> (Προαιρετικό)</span></label> | |
| <input type="text" id="CompanyInternshipPostalCodeLocation" class="form-control" @bind="companyInternship.CompanyInternshipPostalCodeLocation" placeholder="Ταχυδρομικός Κώδικας" /> | |
| </div> | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label><strong>Προσφορά Μεταφοράς προς Εταιρία</strong><span style="color: red;"> *</span></label> | |
| <div class="form-check"> | |
| <input type="radio" id="CompanyInternshipTransportOfferYes" class="form-check-input" name="CompanyInternshipTransportOffer" value="true" checked="@(companyInternship.CompanyInternshipTransportOffer ? "checked" : "")" @onchange="() => UpdateTransportOffer(true)" /> | |
| <label for="CompanyInternshipTransportOfferYes" class="form-check-label">Ναι</label> | |
| </div> | |
| <div class="form-check"> | |
| <input type="radio" id="CompanyInternshipTransportOfferNo" class="form-check-input" name="CompanyInternshipTransportOffer" value="false" checked="@(companyInternship.CompanyInternshipTransportOffer ? "" : "checked")" @onchange="() => UpdateTransportOffer(false)" /> | |
| <label for="CompanyInternshipTransportOfferNo" class="form-check-label">Όχι</label> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Company Internship Areas --> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <div style="display: flex; align-items: center; gap: 12px; margin-bottom: 12px; flex-wrap: wrap;"> | |
| <label style="margin: 0; display: flex; align-items: center; gap: 4px;"> | |
| <strong>Τομείς Πρακτικής</strong> | |
| <span style="color: red;">*</span> | |
| </label> | |
| <button type="button" | |
| @onclick="ToggleCheckboxesForCompanyInternship" | |
| class="toggle-all-areas-btn @(showErrorMessage && !HasAnySelectionForCompanyInternship() ? "shake error" : "")" | |
| style="border: 1px solid #1565c0; background: white; border-radius: 6px; padding: 4px 10px; cursor: pointer; display: inline-flex; align-items: center; gap: 6px; color: #1565c0; font-size: 0.85em; transition: all 0.2s;"> | |
| <span>👆</span> | |
| <span>Προβολή τομέων</span> | |
| </button> | |
| </div> | |
| @if (showCheckboxesForCompanyInternship) | |
| { | |
| <div id="toggleCheckboxes" class="checkbox-container"> | |
| @if (Areas == null || !Areas.Any()) | |
| { | |
| <p>Φορτώνει...</p> | |
| } | |
| else | |
| { | |
| @foreach (var area in Areas) | |
| { | |
| <div class="area-container" style="margin-bottom: 8px; border: 2px solid #1565c0; border-radius: 6px; padding: 8px; background-color: #f8f9fa;"> | |
| <div class="form-check area-header" style="display: flex; align-items: center; gap: 8px;"> | |
| <input type="checkbox" | |
| id="[email protected]" | |
| class="form-check-input" | |
| @onchange="(e) => OnAreaCheckedChangedForCompanyInternship(e, area)" | |
| checked="@IsAreaSelectedForCompanyInternship(area)" /> | |
| <label class="form-check-label area-label @(showErrorMessage && !HasAnySelectionForCompanyInternship() ? "shake error" : "")" | |
| for="[email protected]" | |
| style="cursor: pointer; font-weight: bold; flex-grow: 1; color: #1565c0;"> | |
| @area.AreaName | |
| </label> | |
| <button type="button" | |
| @onclick="@(() => ToggleSubFieldsForCompanyInternship(area))" | |
| @onclick:stopPropagation="true" | |
| class="expand-btn" | |
| style="border: 1px solid #1565c0; background: white; border-radius: 4px; padding: 4px 8px; cursor: pointer; display: flex; align-items: center; gap: 4px; font-size: 0.8em; color: #1565c0; transition: all 0.2s;"> | |
| <span>Υποτομείς</span> | |
| <span class="expand-icon" style="font-size: 10px; transition: transform 0.2s; transform: @(ExpandedAreasForCompanyInternship.Contains(area.Id) ? "rotate(90deg)" : "rotate(0deg)")">▶</span> | |
| </button> | |
| </div> | |
| @if (ExpandedAreasForCompanyInternship.Contains(area.Id)) | |
| { | |
| <div class="subfields-container" style="margin-top: 12px; margin-left: 28px; padding: 12px; background: white; border: 1px solid #e0e0e0; border-radius: 4px;"> | |
| <div style="font-size: 0.85em; color: #666; margin-bottom: 8px; font-weight: 500;"> | |
| Επιλέξτε υποτομείς: | |
| </div> | |
| @if (!string.IsNullOrEmpty(area.AreaSubFields)) | |
| { | |
| var subFields = area.AreaSubFields.Split(',').Select(s => s.Trim()).ToList(); | |
| @foreach (var subField in subFields) | |
| { | |
| <div class="form-check subfield-checkbox" style="margin-bottom: 6px;"> | |
| <input type="checkbox" | |
| id="internship_subfield_@(area.Id)_@(subField)" | |
| class="form-check-input" | |
| @onchange="(e) => OnSubFieldCheckedChangedForCompanyInternship(e, area, subField)" | |
| checked="@IsSubFieldSelectedForCompanyInternship(area, subField)" /> | |
| <label class="form-check-label" for="internship_subfield_@(area.Id)_@(subField)" style="font-weight: normal; font-size: 0.9em;"> | |
| @subField | |
| </label> | |
| </div> | |
| } | |
| } | |
| </div> | |
| } | |
| </div> | |
| } | |
| } | |
| </div> | |
| } | |
| </div> | |
| @if (showErrorMessage && !HasAnySelectionForCompanyInternship()) | |
| { | |
| <div class="text-danger mt-1">Πρέπει να επιλέξετε τουλάχιστον 1 Τομέα Πρακτικής ή Υποτομέα.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4 position-relative"> | |
| <label for="CompanyInternshipDescription"><strong>Περιγραφή Πρακτικής</strong><span style="color: red;"> *</span></label> | |
| <textarea id="CompanyInternshipDescription" class="form-control @(showErrorMessage && string.IsNullOrWhiteSpace(companyInternship.CompanyInternshipDescription) ? "shake error" : "")" | |
| @bind="companyInternship.CompanyInternshipDescription" | |
| @oninput="CheckCharacterLimitInInternshipDescriptionUploadAsCompany" | |
| maxlength="1000" | |
| placeholder="Περιγραφή Πρακτικής"></textarea> | |
| <small class="character-limit light-cadetblue-text">@remainingCharactersInInternshipDescriptionUploadAsCompany/1000</small> | |
| </div> | |
| @if (showErrorMessage && string.IsNullOrWhiteSpace(companyInternship.CompanyInternshipDescription)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται περιγραφή της θέσης.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyInternshipAttachment">Συνημμένο Αρχείο Πρακτικής Άσκησης<span style="font-style: italic; color: gray;"> (Προαιρετικό)</span></label> | |
| <InputFile id="positionAttachment" class="form-control" OnChange="HandleFileSelectedForUploadInternshipAsCompany" /> | |
| </div> | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyInternshipEKPASupervisor">Επιβλέπων Καθηγητής<span style="font-style: italic; color: gray;"> (Προαιρετικό)</span></label> | |
| <div class="input-group"> | |
| <select id="CompanyInternshipEKPASupervisor" class="form-control" @bind="selectedProfessorId"> | |
| <option value="">-- Χωρίς Προτίμηση --</option> | |
| @foreach (var professor in professors) | |
| { | |
| <option value="@professor.Id"> | |
| @($"{professor.ProfName} {professor.ProfSurname}") | |
| </option> | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="mb-3"> | |
| <button class="modern-button" style="background-color: #2d3748; color: white; display: inline-flex; align-items: center;" @onclick="HandleSaveClickToSaveInternshipsAsCompany"> | |
| <i class="fa-regular fa-floppy-disk" style="margin-right: 8px;"></i>Προσωρινή Αποθήκευση Πρακτικής Άσκησης | |
| </button> | |
| <button class="modern-button" style="background-color: #2d3748; color: white; display: inline-flex; align-items: center;" @onclick="HandlePublishClickToSaveInternshipsAsCompany"> | |
| <i class="fa-solid fa-floppy-disk" style="margin-right: 8px;"></i>Δημοσίευση Πρακτικής Άσκησης | |
| </button> | |
| </div> | |
| <!-- Loading Modal for Company Internship --> | |
| @if (showLoadingModalForInternship) | |
| { | |
| <div class="loading-modal"> | |
| <div class="loading-modal-content"> | |
| <div class="loading-spinner"></div> | |
| <p>Αποθήκευση Πρακτικής Άσκησης...</p> | |
| <div class="progress-bar"> | |
| <div class="progress-bar-fill" style="width: @loadingProgress%"></div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| @if (showSuccessMessageWhenSaveInternshipAsCompany) | |
| { | |
| <div class="alert alert-success alert-dismissible fade show" role="alert"> | |
| <strong>Η Θέση Έχει Δημιουργηθεί Επιτυχώς!</strong> | |
| </div> | |
| } | |
| } | |
| @*EDW THA MPOOUNE TA PEDIA GIA TO ANEVASMA PRAKTIKIS APO COMPANY - EDW EMEINA PRIN TIS DIAKOPES FRIDAY 26/7*@ | |
| @*ΠΡΕΠΕΙ ΝΑ ΜΠΕΙ ΚΟΥΜΠΑΚΙ ΓΙΑ ΑΝΕΒΑΣΜΑ ΠΡΑΚΤΙΚΗΣ ΩΣ ΕΤΑΙΡΙΑ ΚΑΙ ΤΑ ΥΠΟΛΟΙΠΟΑ ΠΕΔΙΑ. ΜΕΤΑ ΚΑΝΕ ΤΗΝ ΕΜΦΑΝΙΣΗ ΤΩΝ ΠΡΑΚΤΙΚΩΝ ΟΠΩΣ ΟΙ STUDENTS*@ | |
| @*-------------------------------------------------------------------------------------SHOW MY UPLOADED INTERNSHIPS AS COMPANY---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*@ | |
| <div class="mb-3 row-dark-gray"> | |
| <div class="d-flex justify-content-between align-items-center" @onclick="ToggleFormVisibilityToShowMyActiveInternshipsAsCompany" style="cursor: pointer;"> | |
| <label class="form-label" style="color: #FFF8DC;"> | |
| @if (isLoadingInternshipsHistory) | |
| { | |
| <span> | |
| <i class="fas fa-spinner fa-spin me-2"></i> | |
| Φόρτωση Ιστορικού... | |
| </span> | |
| } | |
| else | |
| { | |
| <span>• Ιστορικό Θέσεων Πρακτικής Άσκησης •</span> | |
| } | |
| </label> | |
| <button class="btn btn-link" @onclick="ToggleFormVisibilityToShowMyActiveInternshipsAsCompany" @onclick:stopPropagation="true"> | |
| @if (isShowActiveInternshipsAsCompanyFormVisible && !isLoadingInternshipsHistory) | |
| { | |
| <span>−</span> <!-- Minus sign --> | |
| } | |
| else if (!isLoadingInternshipsHistory) | |
| { | |
| <span>+</span> <!-- Plus sign --> | |
| } | |
| </button> | |
| </div> | |
| </div> | |
| @if (isShowActiveInternshipsAsCompanyFormVisible && !isLoadingInternshipsHistory) | |
| { | |
| <div class="col-md-2"> | |
| <!-- Reduced the column width --> | |
| <label for="statusFilter" style="color: #2d3748;"><strong>Φίλτρο Εμφάνισης</strong></label> | |
| <div class="input-group"> | |
| <select id="statusFilter" class="form-control form-control-sm" @bind="selectedStatusFilterForInternships"> | |
| <!-- form-control-sm for a smaller dropdown --> | |
| <option value="Όλα">Όλες</option> | |
| <option value="Δημοσιευμένη">Δημοσιευμένες</option> | |
| <option value="Μη Δημοσιευμένη">Μη Δημοσιευμένες</option> | |
| <option value="Αποσυρμένη">Αποσυρμένες</option> | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-md-2"> | |
| <label style="color: #2d3748;"><strong>Αποτελέσματα ανά Σελίδα</strong></label> | |
| <div class="input-group" style="max-width: 65px;"> | |
| <select class="form-control form-control-sm" @onchange="OnPageSizeChange_SeeMyUploadedInternshipsAsCompany"> | |
| @foreach (var option in pageSizeOptions_SeeMyUploadedInternshipsAsCompany) | |
| { | |
| <option value="@option" selected="@(companyInternshipsPerPage == option)">@option</option> | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <br/> | |
| <div class="col-md-2"> | |
| @if (selectedStatusFilterForInternships == "Όλα") | |
| { | |
| <span><strong>Σύνολο: </strong>@totalCount</span> | |
| } | |
| @if (selectedStatusFilterForInternships == "Δημοσιευμένη") | |
| { | |
| <span><strong>Σύνολο: </strong>@publishedCount</span> | |
| } | |
| else if (selectedStatusFilterForInternships == "Μη Δημοσιευμένη") | |
| { | |
| <span><strong>Σύνολο: </strong>@unpublishedCount</span> | |
| } | |
| else if (selectedStatusFilterForInternships == "Αποσυρμένη") | |
| { | |
| <span><strong>Σύνολο: </strong>@withdrawnCount</span> | |
| } | |
| </div> | |
| @*COMPANY INTERNSHIPS*@ | |
| @if (internships != null && internships.Any()) | |
| { | |
| <table class="table"> | |
| <thead> | |
| <tr style="background-color: lightgray; border: 2px solid black;"> | |
| <th style="border: 2px solid black;"><i class="fa-solid fa-key fa-sm" style="color: #0d6efd;"></i> Κωδικός Θέσης</th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-font fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Τίτλος | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-arrows-up-down fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Κατάσταση Θέσης | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-calendar-days fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Δημιουργία Θέσης | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-location-dot fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Τόπος Άσκησης Πρακτικής | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-hand fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ενέργειες | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-paperclip fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Αρχείο | |
| </th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| @foreach (var internship in GetPaginatedCompanyInternships().Where(i => selectedStatusFilterForInternships == "Όλα" || i.CompanyUploadedInternshipStatus == selectedStatusFilterForInternships)) | |
| { | |
| <tr class="internship-position-frame @(internship.CompanyUploadedInternshipStatus == "Δημοσιευμένη" ? "internshipstatus-dimosieumeni" : (internship.CompanyUploadedInternshipStatus == "Μη Δημοσιευμένη" ? "internshipstatus-midimosieumeni" : "internshipstatus-aposirmeni"))"> | |
| <td style="color: #2d3748;"> | |
| @internship.RNGForInternshipUploadedAsCompany_HashedAsUniqueID | |
| </td> | |
| <td @onclick="() => ToggleInternshipExpanded(internship.RNGForInternshipUploadedAsCompany)" style="cursor: pointer;" title="Κλικ για εμφάνιση αιτούντων"> | |
| @internship.CompanyInternshipTitle | |
| </td> | |
| <td>@internship.CompanyUploadedInternshipStatus</td> | |
| <td>@internship.CompanyInternshipUploadDate</td> | |
| <td>@internship.CompanyInternshipDimosLocation</td> | |
| <td> | |
| <div class="d-flex gap-1"> | |
| <!-- Trash icon button for deleting the internship --> | |
| <button class="btn btn-action btn-delete" @onclick="() => DeleteInternship(internship.Id)" title="Οριστική Διαγραφή"> | |
| <i class="fas fa-trash icon-button"></i> | |
| </button> | |
| <!-- Loading Modal for Delete Internship --> | |
| @if (showLoadingModalForDeleteInternship) | |
| { | |
| <div class="loading-modal"> | |
| <div class="loading-modal-content"> | |
| <div class="loading-spinner"></div> | |
| <p>Διαγραφή Πρακτικής Άσκησης...</p> | |
| <div class="progress-bar"> | |
| <div class="progress-bar-fill" style="width: @loadingProgress%"></div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| <!-- Eye icon button for viewing details --> | |
| <button class="btn btn-action btn-view" @onclick="() => ShowInternshipDetails(internship)" title="Εμφάνιση Λεπτομερειών"> | |
| <i class="fas fa-eye icon-button"></i> | |
| </button> | |
| @if (internship.CompanyUploadedInternshipStatus != "Δημοσιευμένη") | |
| { | |
| <!-- Pencil icon button for editing details --> | |
| <button class="btn btn-action btn-edit" @onclick="() => EditInternshipDetails(internship)" title="Διαμόρφωση Θέσεως"> | |
| <i class="fas fa-pencil-alt icon-button"></i> | |
| </button> | |
| <!-- Arrow Up icon button for updating status to Δημοσιευμένη --> | |
| <button class="btn btn-action btn-publish" @onclick='async () => await UpdateInternshipStatusAsCompany(internship.Id, "Δημοσιευμένη")' title="Δημοσίευση Θέσεως"> | |
| <i class="fas fa-arrow-up icon-button"></i> | |
| </button> | |
| } | |
| else | |
| { | |
| <!-- X icon button for updating status to Αποσυρμένη --> | |
| <button class="btn btn-action btn-withdraw" @onclick='async () => await UpdateInternshipStatusAsCompany(internship.Id, "Αποσυρμένη")' title="Απόσυρση Θέσεως"> | |
| <i class="fas fa-times icon-button"></i> | |
| </button> | |
| } | |
| @if (internship.CompanyUploadedInternshipStatus != "Μη Δημοσιευμένη") | |
| { | |
| <!-- Down Arrow icon button for updating status to Μη Δημοσιευμένη --> | |
| <button class="btn btn-action btn-unpublish" @onclick='() => ChangeInternshipStatusToUnpublished(internship.Id)' title="Αποδημοσίευση Θέσεως"> | |
| <i class="fas fa-arrow-down icon-button"></i> | |
| </button> | |
| } | |
| <!-- human icon FOR INTERNSHIP APPLICATION DETAILS --> | |
| <button class="btn btn-action btn-applicants" @onclick="() => ToggleInternshipExpanded(internship.RNGForInternshipUploadedAsCompany)" title="Εμφάνιση Υποψηφίων" disabled="@isLoadingInternshipApplicants"> | |
| @if (isLoadingInternshipApplicants && loadingInternshipId == internship.RNGForInternshipUploadedAsCompany) | |
| { | |
| <i class="fas fa-spinner fa-spin"></i> | |
| } | |
| else | |
| { | |
| <i class="fa-solid fa-graduation-cap icon-button"></i> | |
| } | |
| </button> | |
| </div> | |
| </td> | |
| @*MODAL TO EDIT COMPANY INTERNSHIP*@ | |
| @if (isEditPopupVisibleForInternships) | |
| { | |
| <div class="modal fade show" style="display: block;" tabindex="-1" role="dialog" aria-modal="true"> | |
| <div class="modal-dialog" role="document"> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title" style="color: #007BFF;">@selectedInternship.CompanyInternshipTitle</h5> | |
| <button type="button" class="close" @onclick="CloseEditPopupForInternships">×</button> | |
| </div> | |
| <div class="modal-body"> | |
| <!-- Form to edit the internship details --> | |
| <div class="form-group"> | |
| <label for="editTitle"><strong>Τίτλος</strong></label> | |
| <input type="text" id="editTitle" class="form-control" @bind="selectedInternship.CompanyInternshipTitle" /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editDescription"><strong>Περιγραφή</strong></label> | |
| <textarea id="editDescription" class="form-control" @bind="selectedInternship.CompanyInternshipDescription"></textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editType"><strong>Τύπος</strong></label> | |
| <div class="input-group"> | |
| <select id="editType" class="form-control @(showErrorMessage && string.IsNullOrWhiteSpace(selectedInternship.CompanyInternshipType) ? "shake error" : "")" @bind="selectedInternship.CompanyInternshipType"> | |
| <option value="">-- Επιλέξτε --</option> | |
| <option value="Full-Time">Πλήρους Απασχόλησης</option> | |
| <option value="Part-Time">Μερικής Απασχόλησης</option> | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editType"><strong>Χρηματοδότηση</strong></label> | |
| <div class="input-group"> | |
| <select id="editType" class="form-control @(showErrorMessage && string.IsNullOrWhiteSpace(selectedInternship.CompanyInternshipESPA) ? "shake error" : "")" @bind="selectedInternship.CompanyInternshipESPA"> | |
| <option value="">-- Επιλέξτε --</option> | |
| <option value="ESPA-Funding">Μέσω ΕΣΠΑ</option> | |
| <option value="Self-Funding">Ιδίου Φορέα</option> | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editForeas"><strong>Φορέας</strong></label> | |
| <div class="input-group"> | |
| <select id="editForeas" class="form-control @(showErrorMessage && string.IsNullOrWhiteSpace(selectedInternship.CompanyInternshipForeas) ? "shake error" : "")" @bind="selectedInternship.CompanyInternshipForeas"> | |
| <option value="">-- Επιλέξτε --</option> | |
| @foreach (var foreas in ForeasType) | |
| { | |
| <option value="@foreas">@foreas</option> | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editContactPerson"><strong>Υπεύθυνος Επικοινωνίας</strong></label> | |
| <input type="text" id="editContactPerson" class="form-control" @bind="selectedInternship.CompanyInternshipContactPerson" /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editPerifereiaLocation"><strong>Περιφέρεια</strong></label> | |
| <div class="input-group"> | |
| <select id="editPerifereiaLocation" class="form-control @(showErrorMessage && string.IsNullOrWhiteSpace(selectedInternship.CompanyInternshipPerifereiaLocation) ? "shake error" : "")" @bind="selectedInternship.CompanyInternshipPerifereiaLocation"> | |
| <option value="">-- Επιλέξτε Περιφέρεια --</option> | |
| @foreach (var region in Regions) | |
| { | |
| <option value="@region">@region</option> | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editDimosLocation"><strong>Δήμος</strong></label> | |
| <div class="input-group"> | |
| <select id="editDimosLocation" class="form-control" @bind="selectedInternship.CompanyInternshipDimosLocation"> | |
| <option value="">-- Επιλέξτε Δήμο --</option> | |
| @if (!string.IsNullOrEmpty(selectedInternship.CompanyInternshipDimosLocation) && RegionToTownsMap.ContainsKey(selectedInternship.CompanyInternshipPerifereiaLocation)) | |
| { | |
| foreach (var town in RegionToTownsMap[selectedInternship.CompanyInternshipPerifereiaLocation]) | |
| { | |
| <option value="@town">@town</option> | |
| } | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editTransportOffer"><strong>Προσφορά Μεταφοράς</strong></label> | |
| <div> | |
| <input type="checkbox" id="editTransportOffer" class="form-check-input" @bind="selectedInternship.CompanyInternshipTransportOffer" /> | |
| <span class="ml-2">@(selectedInternship.CompanyInternshipTransportOffer ? "Ναι" : "Όχι")</span> | |
| </div> | |
| </div> | |
| <br/> | |
| <!-- UPDATED: Areas with Subfields for Internship --> | |
| <div class="form-group"> | |
| <label @onclick="ToggleCheckboxesForEditCompanyInternship" style="cursor: pointer; display: flex; align-items: center;"> | |
| <strong>Τομείς Πρακτικής</strong> | |
| <span style="color: #1565c0; font-size: 0.9em; margin-left: 8px; display: flex; align-items: center;"> | |
| <i class="fas @(showCheckboxesForEditCompanyInternship ? "fa-chevron-up" : "fa-chevron-down")" style="margin-right: 4px;"></i> | |
| @(showCheckboxesForEditCompanyInternship ? "Κλείσιμο" : "Άνοιγμα") | |
| </span> | |
| </label> | |
| @if (showCheckboxesForEditCompanyInternship) | |
| { | |
| <div id="toggleCheckboxes" class="checkbox-container"> | |
| @foreach (var area in Areas) | |
| { | |
| <div class="area-container" style="margin-bottom: 8px; border: 2px solid #1565c0; border-radius: 4px; padding: 8px; background-color: #f8f9fa;"> | |
| <div class="form-check area-header"> | |
| <input type="checkbox" | |
| id="[email protected]" | |
| class="form-check-input" | |
| @onchange="(e) => OnAreaCheckedChangedForEditCompanyInternship(e, area)" | |
| checked="@IsAreaSelectedForEditCompanyInternship(area)" /> | |
| <label class="form-check-label area-label" | |
| for="[email protected]" | |
| @onclick="@(() => ToggleSubFieldsForEditCompanyInternship(area))" | |
| @onclick:stopPropagation="true" | |
| style="cursor: pointer; font-weight: bold; display: flex; align-items: center; justify-content: space-between; width: 100%; color: #1565c0;"> | |
| @area.AreaName | |
| <span class="expand-icon" style="font-size: 10px; transition: transform 0.2s; margin-left: 8px;">▶</span> | |
| </label> | |
| </div> | |
| @if (ExpandedAreasForEditCompanyInternship.Contains(area.Id)) | |
| { | |
| <div class="subfields-container" style="margin-top: 8px; margin-left: 20px; padding-left: 15px; border-left: 2px solid #1565c0;"> | |
| @if (!string.IsNullOrEmpty(area.AreaSubFields)) | |
| { | |
| var subFields = area.AreaSubFields.Split(',').Select(s => s.Trim()).ToList(); | |
| @foreach (var subField in subFields) | |
| { | |
| <div class="form-check subfield-checkbox" style="margin-bottom: 4px;"> | |
| <input type="checkbox" | |
| id="edit_internship_subfield_@(area.Id)_@(subField)" | |
| class="form-check-input" | |
| @onchange="(e) => OnSubFieldCheckedChangedForEditCompanyInternship(e, area, subField)" | |
| checked="@IsSubFieldSelectedForEditCompanyInternship(area, subField)" /> | |
| <label class="form-check-label" for="edit_internship_subfield_@(area.Id)_@(subField)" style="font-weight: normal; font-size: 0.9em;"> | |
| @subField | |
| </label> | |
| </div> | |
| } | |
| } | |
| </div> | |
| } | |
| </div> | |
| } | |
| </div> | |
| } | |
| </div> | |
| <br/> | |
| <div class="form-group"> | |
| <label for="editActivePeriod"><strong>Ξεκινάει Από</strong></label> | |
| <input type="date" id="editActivePeriod" class="form-control" @bind="selectedInternship.CompanyInternshipActivePeriod" /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editFinishEstimation"><strong>Εκτιμώμενη Ημερομηνία Ολοκλήρωσης</strong></label> | |
| <input type="date" id="editFinishEstimation" class="form-control" @bind="selectedInternship.CompanyInternshipFinishEstimation" /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editSupervisor"><strong style="color: #87CEEB;">Επιβλέπων Καθηγητής</strong></label> | |
| <div class="input-group"> | |
| <select id="editSupervisor" class="form-control" @bind="selectedInternship.CompanyInternshipEKPASupervisor"> | |
| <option value="">Κανένας Καθηγητής</option> | |
| @foreach (var professor in professors) | |
| { | |
| <option value="@professor.ProfName @professor.ProfSurname">@professor.ProfName @professor.ProfSurname</option> | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editJobAttachment"><strong>Αντικατάσταση Συνημμένου</strong></label> | |
| <InputFile OnChange="HandleFileUploadToEditCompanyInternshipAttachment" /> | |
| </div> | |
| </div> | |
| <div class="modal-footer"> | |
| <button type="button" class="btn btn-secondary" @onclick="CloseEditPopupForInternships">Ακύρωση</button> | |
| <button type="button" class="btn btn-primary" @onclick="SaveEditedInternship">Αποθήκευση</button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| @if (isModalVisibleForInternships && currentInternship != null) | |
| { | |
| <div class="modal fade show d-block" tabindex="-1" role="dialog" style="background-color: rgba(0,0,0,0.5);"> | |
| <div class="modal-dialog modal-dialog-centered" role="document"> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title" style="color: #4682B4;">@currentInternship.CompanyInternshipTitle</h5> | |
| <button type="button" class="close" @onclick="CloseModalForInternships"> | |
| <span aria-hidden="true">×</span> | |
| </button> | |
| </div> | |
| <div class="modal-body"> | |
| @* | |
| <div class="form-group"> | |
| <label for="viewTitle" style="font-weight: bold;">Τίτλος</label> | |
| <input type="text" id="viewTitle" class="form-control" value="@currentInternship.CompanyInternshipTitle" readonly /> | |
| </div> | |
| *@ | |
| <div class="form-group"> | |
| <label for="viewDescription" style="font-weight: bold;">Περιγραφή</label> | |
| <textarea id="viewDescription" class="form-control" readonly>@currentInternship.CompanyInternshipDescription</textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewType"><strong>Τύπος</strong></label> | |
| <input type="text" id="viewType" class="form-control" | |
| value="@(currentInternship.CompanyInternshipType == "Full-Time" ? "Πλήρους Απασχόλησης" : | |
| currentInternship.CompanyInternshipType == "Part-Time" ? "Μερικής Απασχόλησης" : | |
| currentInternship.CompanyInternshipType == "Part-Time_Full-Time" ? "Μερικής ή Πλήρους Απασχόλησης" : "")" | |
| readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Χρηματοδότηση</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-hand-holding-dollar" style="color: #28a745; margin-right: 8px;"></i> | |
| <span> | |
| @( | |
| currentInternship.CompanyInternshipESPA == "ESPA-Funding" ? "Μέσω ΕΣΠΑ" : | |
| currentInternship.CompanyInternshipESPA == "Self-Funding" ? "Ιδίου Φορέα" : | |
| currentInternship.CompanyInternshipESPA == "ESPA-Funding_Self-Funding" ? "Μέσω ΕΣΠΑ ή Ιδίου Φορέα" : | |
| "" | |
| ) | |
| </span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewForeas" style="font-weight: bold;">Φορέας</label> | |
| <input type="text" id="viewForeas" class="form-control" value="@currentInternship.CompanyInternshipForeas" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Email Επικοινωνίας</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-envelope" style="color: #5F9EA0; margin-right: 8px;"></i> | |
| <span>@currentInternship.CompanyInternshipContactPerson</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewPerifereiaLocation" style="font-weight: bold;">Περιφέρεια</label> | |
| <input type="text" id="viewPerifereiaLocation" class="form-control" value="@currentInternship.CompanyInternshipPerifereiaLocation" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewDimosLocation" style="font-weight: bold;">Δήμος</label> | |
| <input type="text" id="viewDimosLocation" class="form-control" value="@currentInternship.CompanyInternshipDimosLocation" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewPostalCodeLocation" style="font-weight: bold;">Ταχ. Κώδικας</label> | |
| <input type="text" id="viewPostalCodeLocation" class="form-control" value="@currentInternship.CompanyInternshipPostalCodeLocation" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Προσφορά Μεταφορικού Μέσου</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto; | |
| @(currentInternship.CompanyInternshipTransportOffer ? "color: #28a745;" : "color: #dc3545;")"> | |
| <i class="fas fa-car" style="margin-right: 8px;"></i> | |
| <span>@(currentInternship.CompanyInternshipTransportOffer ? "Ναι" : "Όχι")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewAreas" style="font-weight: bold;">Τομείς</label> | |
| <textarea id="viewAreas" class="form-control" readonly>@string.Join(Environment.NewLine, currentInternship.CompanyInternshipAreas.Split(','))</textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Ξεκινάει Από</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="far fa-calendar-alt" style="color: #5F9EA0; margin-right: 8px;"></i> | |
| <span>@currentInternship.CompanyInternshipActivePeriod.ToString("yyyy-MM-dd")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Εκτιμώμενη Ημερομηνία Ολοκλήρωσης</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="far fa-calendar-alt" style="color: #5F9EA0; margin-right: 8px;"></i> | |
| <span>@currentInternship.CompanyInternshipFinishEstimation.ToString("yyyy-MM-dd")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold; color: #87CEEB;">Επιβλέπων Καθηγητής</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-user-tie" style="color: #87CEEB; margin-right: 8px;"></i> | |
| <span>@currentInternship.CompanyInternshipEKPASupervisor</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewStatus" style="font-weight: bold;">Κατάσταση</label> | |
| <select id="viewStatus" class="form-control" disabled> | |
| <option value="Δημοσιευμένη" selected="@(currentInternship.CompanyUploadedInternshipStatus == "Δημοσιευμένη")">Δημοσιευμένη</option> | |
| <option value="Μη Δημοσιευμένη" selected="@(currentInternship.CompanyUploadedInternshipStatus == "Μη Δημοσιευμένη")">Μη Δημοσιευμένη</option> | |
| <option value="Αποσυρμένη" selected="@(currentInternship.CompanyUploadedInternshipStatus == "Αποσυρμένη")">Αποσυρμένη</option> | |
| </select> | |
| </div> | |
| </div> | |
| <div class="modal-footer"> | |
| <button type="button" class="btn btn-secondary" @onclick="CloseModalForInternships">Κλείσιμο</button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| <td> | |
| @if (internship.CompanyInternshipAttachment != null && internship.CompanyInternshipAttachment.Length > 0) | |
| { | |
| <div style="display: flex; align-items: center;"> | |
| <button class="btn btn-action btn-download" @onclick="() => DownloadAttachmentForCompanyInternships(internship.Id)" title="Λήψη Αρχείου"> | |
| <i class="fas fa-download icon-button"></i> | |
| </button> | |
| </div> | |
| } | |
| else | |
| { | |
| <span style="display: block; text-align: center; font-weight: bold; font-style: italic;"> | |
| Δεν Διατίθεται | |
| </span> | |
| } | |
| </td> | |
| </tr> | |
| @if (expandedInternships.ContainsKey(internship.RNGForInternshipUploadedAsCompany) && expandedInternships[internship.RNGForInternshipUploadedAsCompany]) | |
| { | |
| <tr> | |
| <td colspan="7"> | |
| <div class="table-responsive mt-2" style="background-color: white; padding: 10px; border-radius: 5px;"> | |
| <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;"> | |
| <i class="fa-solid fa-graduation-cap" style="font-size: 18px; color: #0d6efd;"></i> | |
| <label class="form-label" style="color: #0d6efd; font-weight: bold; font-size: 18px; margin: 0;">Λεπτομέρειες Αιτούντων</label> | |
| <i class="fa-solid fa-graduation-cap" style="font-size: 18px; color: #0d6efd;"></i> | |
| </div> | |
| <table class="table table-sm"> | |
| <thead> | |
| <tr style="background-color: #f5f5f5; border: 1px solid darkblue;"> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-user fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Προφίλ | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-signature fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Όνομα | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-signature fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Επώνυμο | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-calendar-plus fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ημερομηνία Αίτησης | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-calendar-plus fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Έτος Φοίτησης | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-phone fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Τηλέφωνο | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-comments fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Επικοινωνία | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-hand fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ενέργεια | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-hourglass-half fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Κατάσταση Αίτησης | |
| </th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| @if (studentDataCache == null) | |
| { | |
| <!-- Loading state --> | |
| <tr> | |
| <td colspan="9" class="text-center"> | |
| <div class="spinner-border text-primary" role="status"> | |
| <span class="sr-only">Φόρτωση...</span> | |
| </div> | |
| <p>Φόρτωση δεδομένων φοιτητών...</p> | |
| </td> | |
| </tr> | |
| } | |
| else if (internshipApplicantsMap.ContainsKey(internship.RNGForInternshipUploadedAsCompany) && | |
| internshipApplicantsMap[internship.RNGForInternshipUploadedAsCompany].Any()) | |
| { | |
| @foreach (var applicant in internshipApplicantsMap[internship.RNGForInternshipUploadedAsCompany]) | |
| { | |
| var student = studentDataCache.TryGetValue(applicant.StudentDetails.StudentEmailAppliedForInternship, out var s) ? s : null; | |
| var status = applicant.InternshipStatusAppliedAtTheStudentSide ?? "N/A"; | |
| var companyStatus = applicant.InternshipStatusAppliedAtTheCompanySide ?? "N/A"; | |
| <tr style="background-color: @(companyStatus == "Επιτυχής" ? "lightgreen" : | |
| companyStatus == "Απορρίφθηκε" ? "lightcoral" : | |
| companyStatus == "Απορρίφθηκε (Απόσυρση Θέσεως Από Εταιρία)" ? "coral" : | |
| companyStatus == "Αποσύρθηκε από τον φοιτητή" ? "lightyellow" : "transparent")"> | |
| <td> | |
| <a href="#" @onclick="() => ShowStudentDetailsInNameAsHyperlink(applicant.StudentDetails.StudentUniqueIDAppliedForInternship)" | |
| title="Προφίλ Υποψήφιου Σπουδαστή"> | |
| <i class="fas fa-eye icon-button text-dark"></i> | |
| @if (student == null) | |
| { | |
| <span class="badge badge-warning ml-1">Δε βρέθηκε</span> | |
| } | |
| </a> | |
| </td> | |
| <td>@(student?.Name ?? "Δε βρέθηκε")</td> | |
| <td>@(student?.Surname ?? "Δε βρέθηκε")</td> | |
| <td>@applicant.StudentDetails.DateTimeStudentAppliedForInternship.ToString("dd/MM/yyyy HH:mm")</td> | |
| <td>@(student?.StudyYear ?? "-")</td> | |
| <td>@(student?.Telephone ?? "-")</td> | |
| <td class="text-center"> | |
| @applicant.StudentDetails.StudentEmailAppliedForInternship | |
| <a href="mailto:@applicant.StudentDetails.StudentEmailAppliedForInternship" title="Αποστολή Email"> | |
| <i class="fas fa-envelope"></i> | |
| </a> | |
| </td> | |
| <td> | |
| @if (status == "Σε Επεξεργασία") | |
| { | |
| <div style="display: flex; gap: 10px; justify-content: center;"> | |
| <span @onclick="() => ConfirmAndAcceptInternship(applicant.RNGForInternshipApplied, applicant.StudentDetails.StudentUniqueIDAppliedForInternship)" | |
| title="Αποδοχή Αίτησης" style="cursor: pointer;"> | |
| <i class="fas fa-check action-icon accept-icon"></i> | |
| </span> | |
| <span @onclick="() => ConfirmAndRejectInternship(applicant.RNGForInternshipApplied, applicant.StudentDetails.StudentUniqueIDAppliedForInternship)" | |
| title="Απόρριψη Αίτησης" style="cursor: pointer;"> | |
| <i class="fas fa-times action-icon reject-icon"></i> | |
| </span> | |
| </div> | |
| } | |
| else | |
| { | |
| <span class="text">@status</span> | |
| } | |
| </td> | |
| <td> | |
| @if (companyStatus == "Επιτυχής") | |
| { | |
| <span style="color: green; font-weight: bold;">Έχει γίνει Αποδοχή</span> | |
| } | |
| else if (companyStatus == "Απορρίφθηκε") | |
| { | |
| <span style="color: red; font-weight: bold;">Έχει Απορριφθεί</span> | |
| } | |
| else | |
| { | |
| <span>@companyStatus</span> | |
| } | |
| </td> | |
| </tr> | |
| } | |
| } | |
| else | |
| { | |
| <tr> | |
| <td colspan="9" class="text-center text-danger"> | |
| <strong>Καμία Αίτηση για αυτήν την Πρακτική Άσκηση ακόμη</strong> | |
| </td> | |
| </tr> | |
| } | |
| </tbody> | |
| </table> | |
| </div> | |
| </td> | |
| </tr> | |
| } | |
| } | |
| </tbody> | |
| </table> | |
| <br/> | |
| <!-- Pagination Controls --> | |
| <div class="d-flex justify-content-center align-items-center mt-3 gap-1"> | |
| <!-- First Page (<<) --> | |
| <span class="pagination-item @(currentPageForCompanyInternships == 1 ? "disabled" : "")" | |
| @onclick="@(() => GoToFirstPageForCompanyInternships())"> | |
| << | |
| </span> | |
| <!-- Previous Page (<) --> | |
| <span class="pagination-item @(currentPageForCompanyInternships == 1 ? "disabled" : "")" | |
| @onclick="@(() => PreviousPageForCompanyInternships())"> | |
| < | |
| </span> | |
| <!-- Page Numbers --> | |
| @foreach (var pageNum in GetVisiblePagesForCompanyInternships()) | |
| { | |
| @if (pageNum == -1) | |
| { | |
| <span class="pagination-ellipsis">...</span> | |
| } | |
| else | |
| { | |
| <span class="pagination-item @(pageNum == currentPageForCompanyInternships ? "active" : "")" | |
| @onclick="@(() => GoToPageForCompanyInternships(pageNum))"> | |
| @pageNum | |
| </span> | |
| } | |
| } | |
| <!-- Next Page (>) --> | |
| <span class="pagination-item @(currentPageForCompanyInternships == totalPagesForCompanyInternships ? "disabled" : "")" | |
| @onclick="@(() => NextPageForCompanyInternships())"> | |
| > | |
| </span> | |
| <!-- Last Page (>>) --> | |
| <span class="pagination-item @(currentPageForCompanyInternships == totalPagesForCompanyInternships ? "disabled" : "")" | |
| @onclick="@(() => GoToLastPageForCompanyInternships())"> | |
| >> | |
| </span> | |
| <!-- Page counter --> | |
| <span class="ms-3">Σελίδα @currentPageForCompanyInternships από @totalPagesForCompanyInternships</span> | |
| </div> | |
| <br/> | |
| <br/> | |
| } | |
| } | |
| </div> | |
| <!-- MODAL FOR STUDENT DETAILS FROM COMPANY JOBS/INTERNSHIPS/THESIS --> | |
| @if (isModalVisibleToShowStudentDetailsAsCompanyFromTheirHyperlinkNameInCompanyInternships) | |
| { | |
| <div class="modal fade show d-block" tabindex="-1" role="dialog" style="background-color: rgba(0, 0, 0, 0.5);"> | |
| <div class="modal-dialog modal-dialog-centered modal-lg" role="document"> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title" style="color: #4682B4;"> | |
| @(selectedStudentFromCache?.Name ?? "N/A") @(selectedStudentFromCache?.Surname ?? "N/A") | |
| </h5> | |
| <button type="button" class="close" aria-label="Close" @onclick="CloseModalforHyperLinkTitleStudentName"> | |
| <span aria-hidden="true">×</span> | |
| </button> | |
| </div> | |
| <div class="modal-body"> | |
| @if (selectedStudentFromCache == null) | |
| { | |
| <div class="alert alert-warning">Δεν βρέθηκαν στοιχεία για τον φοιτητή</div> | |
| } | |
| else | |
| { | |
| <!-- Display student details here --> | |
| <div class="form-group text-center"> | |
| @if (selectedStudentFromCache?.Image != null && selectedStudentFromCache.Image.Length > 0) | |
| { | |
| var base64Image = Convert.ToBase64String(selectedStudentFromCache.Image); | |
| <img src="data:image/jpeg;base64,@base64Image" alt="Φωτογραφία Προφίλ Σπουδαστή" | |
| style="max-width: 150px; max-height: 150px; border-radius: 50%; object-fit: cover;" /> | |
| } | |
| else | |
| { | |
| <p>Δεν υπάρχει φωτογραφία Προφίλ</p> | |
| } | |
| </div> | |
| <div class="form-group"> | |
| <label><strong>Αριθμός Μητρώου</strong></label> | |
| <input type="text" class="form-control" value="@selectedStudentFromCache?.RegNumber" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Πανεπιστήμιο</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-university" style="color: #007BFF; margin-right: 8px;"></i> | |
| <span>@selectedStudentFromCache?.University</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τμήμα</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-building" style="color: #6c757d; margin-right: 8px;"></i> | |
| <span>@selectedStudentFromCache?.Department</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Επίπεδο Σπουδών</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-graduation-cap" style="color: #6c757d; margin-right: 8px;"></i> | |
| <span>@selectedStudentFromCache?.LevelOfDegree</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label><strong>Τεχνικές Ικανότητες</strong></label> | |
| <textarea class="form-control" rows="2" readonly>@selectedStudentFromCache?.Keywords</textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label><strong>Περιοχές Εξειδίκευσης</strong></label> | |
| <textarea class="form-control" value="@selectedStudentFromCache?.AreasOfExpertise" readonly></textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Ημερομηνία Εγγραφής</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="far fa-calendar-alt" style="color: #5F9EA0; margin-right: 8px;"></i> | |
| <span>@selectedStudentFromCache?.EnrollmentDate</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Επικοινωνία</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-envelope" style="color: #007BFF; margin-right: 8px;"></i> | |
| <span>@selectedStudentFromCache?.Email</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τηλέφωνο</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-phone" style="color: #28a745; margin-right: 8px;"></i> | |
| <span>@selectedStudentFromCache?.Telephone</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label><strong>Περιφέρεια</strong></label> | |
| <input type="text" class="form-control" value="@selectedStudentFromCache?.PermanentRegion" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label><strong>Πόλη</strong></label> | |
| <input type="text" class="form-control" value="@selectedStudentFromCache?.PermanentTown" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Διεύθυνση</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto; background-color: #fff;"> | |
| <i class="fas fa-map-marker-alt" style="color: #dc3545; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrEmpty(selectedStudentFromCache?.PermanentAddress)) | |
| { | |
| <a href="https://www.google.com/maps/search/?api=1&[email protected](selectedStudentFromCache.PermanentAddress)" | |
| target="_blank" | |
| style="color: #007bff; text-decoration: underline; word-break: break-word;"> | |
| @selectedStudentFromCache.PermanentAddress | |
| </a> | |
| } | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">LinkedIn Προφίλ</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto; background-color: #fff;"> | |
| <i class="fab fa-linkedin" style="color: #0077b5; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrEmpty(selectedStudentFromCache?.LinkedInProfile)) | |
| { | |
| <a href="@selectedStudentFromCache.LinkedInProfile" target="_blank" | |
| style="color: #0077b5; text-decoration: underline; word-break: break-word;"> | |
| @selectedStudentFromCache.LinkedInProfile | |
| </a> | |
| } | |
| else | |
| { | |
| <span style="color: #6c757d;">Δεν έχει οριστεί προφίλ LinkedIn ακόμη..</span> | |
| } | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Προσωπική Ιστοσελίδα</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto; background-color: #fff;"> | |
| <i class="fas fa-globe" style="color: #17a2b8; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrEmpty(selectedStudentFromCache?.PersonalWebsite)) | |
| { | |
| <a href="@selectedStudentFromCache.PersonalWebsite" target="_blank" | |
| style="color: #007bff; text-decoration: underline; word-break: break-word;"> | |
| @selectedStudentFromCache.PersonalWebsite | |
| </a> | |
| } | |
| else | |
| { | |
| <span style="color: #6c757d;">Δεν έχει οριστεί ιστοσελίδα ακόμη..</span> | |
| } | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Διαθέτει Μέσο Μεταφοράς</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto; | |
| @(selectedStudentFromCache?.Transport == true ? "color: #28a745;" : "color: #dc3545;")"> | |
| <i class="fas fa-car" style="margin-right: 8px;"></i> | |
| <span>@(selectedStudentFromCache?.Transport == true ? "Ναι" : "Όχι")</span> | |
| </div> | |
| </div> | |
| <br/> | |
| <div class="form-group"> | |
| <label><strong>Βιογραφικό</strong></label> | |
| <div> | |
| @if (selectedStudentFromCache?.Attachment != null) | |
| { | |
| <button class="btn btn-primary" @onclick="() => DownloadStudentCVFromCompanyInternships(selectedStudentFromCache.Email)"> | |
| Λήψη Βιογραφικού | |
| </button> | |
| } | |
| else | |
| { | |
| <span>Δεν Διατίθεται Βιογραφικό!</span> | |
| } | |
| </div> | |
| </div> | |
| } | |
| </div> | |
| <div class="modal-footer"> | |
| <button type="button" class="btn btn-secondary" @onclick="CloseModalforHyperLinkTitleStudentName">Κλείσιμο</button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| @*----------------------------------------------------------------------------------------------------------INTERNSHIPS TAB COMPANIES END------------------------------------------------------------------------------------------------------------*@ | |
| @*----------------------------------------------------------------------------------------------------------THESIS COMPANIES START------------------------------------------------------------------------------------------------------------*@ | |
| <!-- COMPANY THESIS tab content --> | |
| <div class="tab-pane fade" id="thesis" role="tabpanel" aria-labelledby="thesis-tab"> | |
| <!-- ΔΗΜΙΟΥΡΓΙΑ ΠΤΥΧΙΑΚΗΣ ΕΡΓΑΣΙΑΣ ΩΣ COMPANY USER--> | |
| <div class="mb-3 row-dark-gray"> | |
| <div class="d-flex justify-content-between align-items-center" @onclick="ToggleFormVisibilityForUploadCompanyThesis" style="cursor: pointer;"> | |
| <label class="form-label" style="color: #FFF8DC;">• Δημιουργία Πτυχιακής Εργασίας •</label> | |
| <button class="btn btn-link" @onclick="ToggleFormVisibilityForUploadCompanyThesis" @onclick:stopPropagation="true"> | |
| @if (isUploadCompanyThesisFormVisible) | |
| { | |
| <span>−</span> <!-- Minus sign --> | |
| } | |
| else | |
| { | |
| <span>+</span> <!-- Plus sign --> | |
| } | |
| </button> | |
| </div> | |
| </div> | |
| @if (isUploadCompanyThesisFormVisible) | |
| { | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="companyThesisPositionTitle"><strong>Τίτλος</strong><span style="color: red;"> *</span></label> | |
| <input type="text" id="companyThesisTitle" class="form-control @(showErrorMessageforUploadingthesisAsCompany && string.IsNullOrWhiteSpace(thesis.CompanyThesisTitle) ? "shake error" : "")" @bind="thesis.CompanyThesisTitle" @oninput="CheckCharacterLimitInThesisFieldUploadAsCompany" maxlength="120" /> | |
| <small class="character-limit light-cadetblue-text">@remainingCharactersInThesisFieldUploadAsCompany/120</small> | |
| </div> | |
| @if (showErrorMessageforUploadingthesisAsCompany && string.IsNullOrWhiteSpace(thesis.CompanyThesisTitle)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται επιλογή Τίτλος Θέσης.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="companyThesisDescription"><strong>Περιγραφή</strong> <span style="color: red;"> *</span></label> | |
| <textarea id="CompanyThesisDescription" class="form-control @(showErrorMessageforUploadingthesisAsCompany && string.IsNullOrWhiteSpace(thesis.CompanyThesisDescriptionsUploaded) ? "shake error" : "")" | |
| @bind="thesis.CompanyThesisDescriptionsUploaded" | |
| @oninput="CheckCharacterLimitInThesisDescriptionUploadAsCompany" | |
| maxlength="1000" | |
| placeholder="Σύντομη Περιγραφή Πτυχιακής"></textarea> | |
| <small class="character-limit light-cadetblue-text">@remainingCharactersInThesisDescriptionUploadAsCompany/1000</small> | |
| </div> | |
| @if (showErrorMessageforUploadingthesisAsCompany && string.IsNullOrWhiteSpace(thesis.CompanyThesisDescriptionsUploaded)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται Περιγραφή της Θέσης.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="companyThesisCompanySupervisorFullName"> | |
| <strong>Όνομ/νυμο Υπευθύνου</strong><span style="color: red;"> *</span> | |
| </label> | |
| <input type="text" id="CompanyThesisCompanySupervisorFullName" | |
| class="form-control @(showErrorMessageforUploadingthesisAsCompany && string.IsNullOrWhiteSpace(thesis.CompanyThesisCompanySupervisorFullName) ? "shake error" : "")" | |
| @bind="thesis.CompanyThesisCompanySupervisorFullName" /> | |
| </div> | |
| @if (showErrorMessageforUploadingthesisAsCompany && string.IsNullOrWhiteSpace(thesis.CompanyThesisCompanySupervisorFullName)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται Όνομα Υπευθύνου Πτυχιακής Εργασίας.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="companyThesisContactPersonEmail"> | |
| <strong>Email Υπευθύνου</strong><span style="color: red;"> *</span> | |
| </label> | |
| <input type="text" id="thesisContactPersonEmail" | |
| class="form-control @(showErrorMessageforUploadingthesisAsCompany && string.IsNullOrWhiteSpace(thesis.CompanyThesisContactPersonEmail) ? "shake error" : "")" | |
| @bind="thesis.CompanyThesisContactPersonEmail" /> | |
| </div> | |
| @if (showErrorMessageforUploadingthesisAsCompany && string.IsNullOrWhiteSpace(thesis.CompanyThesisContactPersonEmail)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται το Email Υπευθύνου Πτυχιακής Εργασίας.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyThesisContactTelephonePerson"> | |
| Τηλέφωνο Υπευθύνου | |
| <span style="font-style: italic; color: gray;"> (Προαιρετικό)</span> | |
| </label> | |
| <div class="input-group"> | |
| <div class="input-group-prepend"> | |
| <span class="input-group-textfortelephone">+30</span> | |
| </div> | |
| <input type="tel" id="CompanyThesisContactTelephonePerson" | |
| class="form-control @(showErrorMessageforUploadingthesisAsCompany && !IsValidPhoneNumber(thesis.CompanyThesisContactPersonTelephone) ? "shake error" : "")" | |
| @bind="thesis.CompanyThesisContactPersonTelephone" | |
| @oninput="OnCompanyCreateThesisPhoneNumberInput" | |
| placeholder="Τηλέφωνο Υπευθύνου" | |
| maxlength="10" /> | |
| </div> | |
| @if (showErrorMessageforUploadingthesisAsCompany && !IsValidPhoneNumber(thesis.CompanyThesisContactPersonTelephone) && !string.IsNullOrWhiteSpace(thesis.CompanyThesisContactPersonTelephone)) | |
| { | |
| <small style="color: red;">Παρακαλώ εισάγετε αριθμό έγκυρο τηλεφώνου...</small> | |
| } | |
| </div> | |
| </div> | |
| <!-- Company Thesis Areas --> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <div style="display: flex; align-items: center; gap: 12px; margin-bottom: 12px; flex-wrap: wrap;"> | |
| <label style="margin: 0; display: flex; align-items: center; gap: 4px;"> | |
| <strong>Τομείς Πτυχιακής</strong> | |
| <span style="color: red;">*</span> | |
| </label> | |
| <button type="button" | |
| @onclick="ToggleCheckboxesForCompanyThesis" | |
| class="toggle-all-areas-btn @(showErrorMessageforUploadingthesisAsCompany && !HasAnySelectionForCompanyThesis() ? "shake error" : "")" | |
| style="border: 1px solid #1565c0; background: white; border-radius: 6px; padding: 4px 10px; cursor: pointer; display: inline-flex; align-items: center; gap: 6px; color: #1565c0; font-size: 0.85em; transition: all 0.2s;"> | |
| <span>👆</span> | |
| <span>Προβολή τομέων</span> | |
| </button> | |
| </div> | |
| @if (showCheckboxesForCompanyThesis) | |
| { | |
| <div class="checkbox-container"> | |
| @if (Areas == null || !Areas.Any()) | |
| { | |
| <p>Φορτώνει...</p> | |
| } | |
| else | |
| { | |
| @foreach (var area in Areas) | |
| { | |
| <div class="area-container" style="margin-bottom: 8px; border: 2px solid #1565c0; border-radius: 6px; padding: 8px; background-color: #f8f9fa;"> | |
| <div class="form-check area-header" style="display: flex; align-items: center; gap: 8px;"> | |
| <input type="checkbox" | |
| id="[email protected]" | |
| class="form-check-input" | |
| @onchange="(e) => OnAreaCheckedChangedForCompanyThesis(e, area)" | |
| checked="@IsAreaSelectedForCompanyThesis(area)" /> | |
| <label class="form-check-label area-label @(showErrorMessageforUploadingthesisAsCompany && !HasAnySelectionForCompanyThesis() ? "shake error" : "")" | |
| for="[email protected]" | |
| style="cursor: pointer; font-weight: bold; flex-grow: 1; color: #1565c0;"> | |
| @area.AreaName | |
| </label> | |
| <button type="button" | |
| @onclick="@(() => ToggleSubFieldsForCompanyThesis(area))" | |
| @onclick:stopPropagation="true" | |
| class="expand-btn" | |
| style="border: 1px solid #1565c0; background: white; border-radius: 4px; padding: 4px 8px; cursor: pointer; display: flex; align-items: center; gap: 4px; font-size: 0.8em; color: #1565c0; transition: all 0.2s;"> | |
| <span>Υποτομείς</span> | |
| <span class="expand-icon" style="font-size: 10px; transition: transform 0.2s; transform: @(ExpandedAreasForCompanyThesis.Contains(area.Id) ? "rotate(90deg)" : "rotate(0deg)")">▶</span> | |
| </button> | |
| </div> | |
| @if (ExpandedAreasForCompanyThesis.Contains(area.Id)) | |
| { | |
| <div class="subfields-container" style="margin-top: 12px; margin-left: 28px; padding: 12px; background: white; border: 1px solid #e0e0e0; border-radius: 4px;"> | |
| <div style="font-size: 0.85em; color: #666; margin-bottom: 8px; font-weight: 500;"> | |
| Επιλέξτε υποτομείς: | |
| </div> | |
| @if (!string.IsNullOrEmpty(area.AreaSubFields)) | |
| { | |
| var subFields = area.AreaSubFields.Split(',').Select(s => s.Trim()).ToList(); | |
| @foreach (var subField in subFields) | |
| { | |
| <div class="form-check subfield-checkbox" style="margin-bottom: 6px;"> | |
| <input type="checkbox" | |
| id="thesis_subfield_@(area.Id)_@(subField)" | |
| class="form-check-input" | |
| @onchange="(e) => OnSubFieldCheckedChangedForCompanyThesis(e, area, subField)" | |
| checked="@IsSubFieldSelectedForCompanyThesis(area, subField)" /> | |
| <label class="form-check-label" for="thesis_subfield_@(area.Id)_@(subField)" style="font-weight: normal; font-size: 0.9em;"> | |
| @subField | |
| </label> | |
| </div> | |
| } | |
| } | |
| </div> | |
| } | |
| </div> | |
| } | |
| } | |
| </div> | |
| } | |
| </div> | |
| @if (showErrorMessageforUploadingthesisAsCompany && !HasAnySelectionForCompanyThesis()) | |
| { | |
| <div class="text-danger mt-1">Πρέπει να επιλέξετε τουλάχιστον 1 Τομέα Πτυχιακής ή Υποτομέα.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <div style="display: flex; align-items: center; gap: 12px; margin-bottom: 12px; flex-wrap: wrap;"> | |
| <label style="margin: 0; display: flex; align-items: center; gap: 4px;"> | |
| <strong>Απαιτούμενες Δεξιότητες</strong> | |
| <span style="color: red;">*</span> | |
| </label> | |
| <button type="button" | |
| @onclick="ToggleCheckboxesForSkillsForCompanyThesis" | |
| class="toggle-all-areas-btn @(showErrorMessageforUploadingthesisAsCompany && string.IsNullOrWhiteSpace(thesis.CompanyThesisSkillsNeeded) ? "shake error" : "")" | |
| style="border: 1px solid @(showErrorMessageforUploadingthesisAsCompany && string.IsNullOrWhiteSpace(thesis.CompanyThesisSkillsNeeded) ? "#dc3545" : "#1565c0"); background: white; border-radius: 6px; padding: 4px 10px; cursor: pointer; display: inline-flex; align-items: center; gap: 6px; color: @(showErrorMessageforUploadingthesisAsCompany && string.IsNullOrWhiteSpace(thesis.CompanyThesisSkillsNeeded) ? "#dc3545" : "#1565c0"); font-size: 0.85em; transition: all 0.2s;"> | |
| <span>👆</span> | |
| <span>Προβολή δεξιοτήτων</span> | |
| </button> | |
| </div> | |
| <div id="toggleCheckboxesForThesisSkills" class="checkbox-containerThesisSkills" style="display: none;"> | |
| @if (Skills == null || !Skills.Any()) | |
| { | |
| <p>Φορτώνει...</p> | |
| } | |
| else | |
| { | |
| <div class="d-flex flex-wrap"> | |
| @foreach (var skill in Skills) | |
| { | |
| <div class="form-check me-2 mb-2" style="flex-basis: 20%;"> | |
| <input type="checkbox" | |
| id="[email protected]" | |
| class="form-check-input" | |
| @onchange="(e) => OnCheckedChangedForSkillsWhenUploadThesisAsCompany(e, skill)" | |
| checked="@IsSelectedForSkillsWhenUploadThesisAsCompany(skill)" /> | |
| <label class="form-check-label @(showErrorMessageforUploadingthesisAsCompany && string.IsNullOrWhiteSpace(thesis.CompanyThesisSkillsNeeded) ? "shake error" : "")" | |
| for="[email protected]"> | |
| @skill.SkillName | |
| </label> | |
| </div> | |
| } | |
| </div> | |
| } | |
| </div> | |
| @if (showErrorMessageforUploadingthesisAsCompany && string.IsNullOrWhiteSpace(thesis.CompanyThesisSkillsNeeded)) | |
| { | |
| <div class="text-danger mt-1">Πρέπει να επιλέξετε τουλάχιστον 1 Δεξιότητα.</div> | |
| } | |
| </div> | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="companyThesisDepartment">Τμήμα Εταιρείας<span style="font-style: italic; color: gray;"> (Προαιρετικό)</span></label> | |
| <input type="text" id="thesisDepartment" class="form-control" @bind="thesis.CompanyThesisDepartment" /> | |
| </div> | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="companyThesisStartingDate"> | |
| <strong>Ημερομηνία Έναρξης</strong><span style="color: red;"> *</span> | |
| </label> | |
| <input type="date" id="CompanyThesisStartingDate" | |
| class="form-control @(showErrorMessageforUploadingthesisAsCompany && thesis.CompanyThesisStartingDate.Date <= DateTime.Today ? "shake error" : "")" | |
| @bind="thesis.CompanyThesisStartingDate" /> | |
| </div> | |
| @if (showErrorMessageforUploadingthesisAsCompany && thesis.CompanyThesisStartingDate.Date <= DateTime.Today) | |
| { | |
| <div class="text-danger mt-1">Η ημερομηνία πρέπει να είναι μεταγενέστερη της σημερινής ημερομηνίας.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="companyThesisAttachment">Συνημμένο Αρχείο Πτυχιακής Εργασίας<span style="font-style: italic; color: gray;"> (Προαιρετικό)</span></label> | |
| <InputFile id="companyThesisAttachment" class="form-control" OnChange="HandleFileSelectedForCompanyThesisAttachment" /> | |
| </div> | |
| </div> | |
| <div class="mb-3"> | |
| <button class="modern-button" style="background-color: #2d3748; color: white; display: inline-flex; align-items: center;" | |
| @onclick="HandleTemporarySaveThesisAsCompany"> | |
| <i class="fa-regular fa-floppy-disk" style="margin-right: 8px;"></i>Προσωρινή Αποθήκευση Πτυχιακής Εργασίας | |
| </button> | |
| <button class="modern-button" style="background-color: #2d3748; color: white; display: inline-flex; align-items: center;" | |
| @onclick="HandlePublishSaveThesisAsCompany"> | |
| <i class="fa-solid fa-floppy-disk" style="margin-right: 8px;"></i>Δημοσίευση Πτυχιακής Εργασίας | |
| </button> | |
| </div> | |
| <!-- Loading Modal for Company Thesis --> | |
| @if (showLoadingModalForThesis) | |
| { | |
| <div class="loading-modal"> | |
| <div class="loading-modal-content"> | |
| <div class="loading-spinner"></div> | |
| <p>Αποθήκευση Πτυχιακής Εργασίας...</p> | |
| <div class="progress-bar"> | |
| <div class="progress-bar-fill" style="width: @loadingProgress%"></div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| @if (showErrorMessageforUploadingthesisAsCompany) | |
| { | |
| <div class="alert alert-danger" role="alert"> | |
| Συμπληρώστε Όλα Τα Υποχρεωτικά Πεδία και Προσπαθήστε Ξανά | |
| </div> | |
| } | |
| @if (showSuccessMessage) | |
| { | |
| <div class="alert alert-success alert-dismissible fade show" role="alert"> | |
| <strong>Η Θέση Έχει Δημιουργηθεί Επιτυχώς!</strong> | |
| </div> | |
| } | |
| } | |
| <!-- COMPANY SEARCH MY UPLOADED THESIS tab content --> | |
| <div class="mb-3 row-dark-gray"> | |
| <div class="d-flex justify-content-between align-items-center" @onclick="ToggleFormVisibilityToShowMyActiveThesesAsCompany" style="cursor: pointer;"> | |
| <label class="form-label" style="color: #FFF8DC; font-family: inherit; margin: 0; padding: 0;"> | |
| @if (isLoadingThesesHistory) | |
| { | |
| <span> | |
| <i class="fas fa-spinner fa-spin me-2"></i> | |
| Φόρτωση Ιστορικού... | |
| </span> | |
| } | |
| else | |
| { | |
| <span>• Ιστορικό Θέσεων Πτυχιακών Εργασιών •</span> | |
| } | |
| </label> | |
| <button class="btn btn-link" @onclick="ToggleFormVisibilityToShowMyActiveThesesAsCompany" @onclick:stopPropagation="true"> | |
| @if (isShowActiveThesesAsCompanyFormVisible && !isLoadingThesesHistory) | |
| { | |
| <span>−</span> <!-- Minus sign --> | |
| } | |
| else if (!isLoadingThesesHistory) | |
| { | |
| <span>+</span> <!-- Plus sign --> | |
| } | |
| </button> | |
| </div> | |
| </div> | |
| @if (isShowActiveThesesAsCompanyFormVisible && !isLoadingThesesHistory) | |
| { | |
| <div class="col-md-2"> | |
| <label for="statusFilterForCompanyTheses" style="color: #2d3748;"><strong>Φίλτρο Εμφάνισης</strong></label> | |
| <div class="input-group"> | |
| <select id="statusFilterForCompanyTheses" class="form-control form-control-sm" | |
| @onchange="HandleStatusFilterChangeForThesesAsCompany"> | |
| <option value="Όλα">Όλες</option> | |
| <option value="Δημοσιευμένη">Δημοσιευμένες</option> | |
| <option value="Μη Δημοσιευμένη">Μη Δημοσιευμένες</option> | |
| <option value="Αποσυρμένη">Αποσυρμένες</option> | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-md-2"> | |
| <label style="color: #2d3748;"><strong>Αποτελέσματα ανά Σελίδα</strong></label> | |
| <div class="input-group" style="max-width: 65px;"> | |
| <select class="form-control form-control-sm" @onchange="OnPageSizeChange_SeeMyUploadedThesesAsCompany"> | |
| @foreach (var option in pageSizeOptions_SeeMyUploadedThesesAsCompany) | |
| { | |
| <option value="@option" selected="@(CompanyThesesPerPage == option)">@option</option> | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <br/> | |
| <div class="col-md-2"> | |
| @if (selectedStatusFilterForCompanyTheses == "Όλα") | |
| { | |
| <span><strong>Σύνολο: </strong>@totalCountForCompanyTheses</span> | |
| } | |
| else if (selectedStatusFilterForCompanyTheses == "Δημοσιευμένη") | |
| { | |
| <span><strong>Σύνολο: </strong>@publishedCountForCompanyTheses</span> | |
| } | |
| else if (selectedStatusFilterForCompanyTheses == "Μη Δημοσιευμένη") | |
| { | |
| <span><strong>Σύνολο: </strong>@unpublishedCountForCompanyTheses</span> | |
| } | |
| else if (selectedStatusFilterForCompanyTheses == "Αποσυρμένη") | |
| { | |
| <span><strong>Σύνολο: </strong>@withdrawnCountForCompanyTheses</span> | |
| } | |
| </div> | |
| @if (companytheses != null && companytheses.Any()) | |
| { | |
| <table class="table"> | |
| <thead> | |
| <tr style="background-color: lightgray; border: 2px solid black;"> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-key fa-sm" style="color: #0d6efd; margin-right: 8px;"></i> | |
| Κωδικός Θέσης | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-font fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Τίτλος | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-arrows-up-down fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Κατάσταση Θέσης | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-calendar-days fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Δημιουργία Θέσης | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-hand fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ενέργειες | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-paperclip fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Αρχείο | |
| </th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| @foreach (var companythesis in GetPaginatedCompanyTheses().Where(j => selectedStatusFilterForCompanyTheses == "Όλα" || j.CompanyThesisStatus == selectedStatusFilterForCompanyTheses)) | |
| { | |
| <tr class="companythesis-position-frame @(companythesis.CompanyThesisStatus == "Δημοσιευμένη" ? "companythesisstatus-dimosieumeni" : (companythesis.CompanyThesisStatus == "Μη Δημοσιευμένη" ? "companythesisstatus-midimosieumeni" : "companythesisstatus-aposirmeni"))"> | |
| <td style="color: #2d3748;"> | |
| @companythesis.RNGForThesisUploadedAsCompany_HashedAsUniqueID | |
| </td> | |
| <td @onclick="() => ToggleCompanyThesesExpanded(companythesis.RNGForThesisUploadedAsCompany)" style="cursor: pointer;" title="Κλικ για εμφάνιση λεπτομερειών"> | |
| @companythesis.CompanyThesisTitle | |
| </td> | |
| <td>@companythesis.CompanyThesisStatus</td> | |
| <td>@companythesis.CompanyThesisUploadDateTime</td> | |
| <td> | |
| <div class="d-flex gap-1"> | |
| <button class="btn btn-action btn-delete" @onclick="() => DeleteCompanyThesis(companythesis.Id)" title="Οριστική Διαγραφή Θέσης"> | |
| <i class="fas fa-trash icon-button"></i> | |
| </button> | |
| <!-- Loading Modal for Delete Company Thesis --> | |
| @if (showLoadingModalForDeleteCompanyThesis) | |
| { | |
| <div class="loading-modal"> | |
| <div class="loading-modal-content"> | |
| <div class="loading-spinner"></div> | |
| <p>Διαγραφή Πτυχιακής Εργασίας...</p> | |
| <div class="progress-bar"> | |
| <div class="progress-bar-fill" style="width: @loadingProgress%"></div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| <button class="btn btn-action btn-view" @onclick="() => ShowCompanyThesisDetails(companythesis)" title="Εμφάνιση Λεπτομερειών"> | |
| <i class="fas fa-eye icon-button"></i> | |
| </button> | |
| @if (companythesis.CompanyThesisStatus != "Δημοσιευμένη") | |
| { | |
| <button class="btn btn-action btn-edit" @onclick="() => EditCompanyThesisDetails(companythesis)" title="Επεξεργασία Θέσης"> | |
| <i class="fas fa-pencil-alt icon-button"></i> | |
| </button> | |
| <button class="btn btn-action btn-publish" @onclick='async () => await UpdateThesisStatusAsCompany(companythesis.Id, "Δημοσιευμένη")' title="Δημοσίευση Θέσης"> | |
| <i class="fas fa-arrow-up icon-button"></i> | |
| </button> | |
| } | |
| else | |
| { | |
| <button class="btn btn-action btn-withdraw" @onclick='async () => await UpdateThesisStatusAsCompany(companythesis.Id, "Αποσυρμένη")' title="Απόσυρση Θέσης"> | |
| <i class="fas fa-times icon-button"></i> | |
| </button> | |
| } | |
| @if (companythesis.CompanyThesisStatus != "Μη Δημοσιευμένη") | |
| { | |
| <button class="btn btn-action btn-unpublish" @onclick='() => ChangeCompanyThesisStatusToUnpublished(companythesis.Id)' title="Αποδημοσίευση Θέσης"> | |
| <i class="fas fa-arrow-down icon-button"></i> | |
| </button> | |
| } | |
| <button class="btn btn-action btn-applicants" @onclick="() => ToggleCompanyThesesExpanded(companythesis.RNGForThesisUploadedAsCompany)" title="Εμφάνιση Υποψηφίων" disabled="@isLoadingCompanyThesisApplicants"> | |
| @if (isLoadingCompanyThesisApplicants && loadingCompanyThesisId == companythesis.RNGForThesisUploadedAsCompany) | |
| { | |
| <i class="fas fa-spinner fa-spin"></i> | |
| } | |
| else | |
| { | |
| <i class="fa-solid fa-graduation-cap icon-button"></i> | |
| } | |
| </button> | |
| <button class="btn btn-action btn-professors" @onclick="() => ToggleCompanyThesesExpandedForProfessorInterest(companythesis.RNGForThesisUploadedAsCompany)" title="Καθηγητής που Ενδιαφέρθηκε" disabled="@isLoadingCompanyThesisProfessors"> | |
| @if (isLoadingCompanyThesisProfessors && loadingCompanyThesisProfessorId == companythesis.RNGForThesisUploadedAsCompany) | |
| { | |
| <i class="fas fa-spinner fa-spin"></i> | |
| } | |
| else | |
| { | |
| <i class="fa-solid fa-user-tie icon-button"></i> | |
| } | |
| </button> | |
| </div> | |
| </td> | |
| <td> | |
| @if (companythesis.CompanyThesisAttachmentUpload != null && companythesis.CompanyThesisAttachmentUpload.Length > 0) | |
| { | |
| <div style="display: flex; align-items: center;"> | |
| <button class="btn btn-action btn-download" @onclick="() => DownloadAttachmentForCompanyTheses(companythesis.Id)" title="Λήψη Αρχείου"> | |
| <i class="fas fa-download icon-button"></i> | |
| </button> | |
| </div> | |
| } | |
| else | |
| { | |
| <span style="display: block; text-align: center; font-weight: bold; font-style: italic;"> | |
| Δεν Διατίθεται | |
| </span> | |
| } | |
| </td> | |
| </tr> | |
| @if (expandedCompanyTheses.ContainsKey(companythesis.RNGForThesisUploadedAsCompany) && expandedCompanyTheses[companythesis.RNGForThesisUploadedAsCompany]) | |
| { | |
| <br/> | |
| <tr> | |
| <td colspan="9" style="padding: 0;"> | |
| <div style="display: flex; justify-content: space-between; align-items: center; height: 24px; line-height: 24px; width: 100%;"> | |
| <i class="fa-solid fa-graduation-cap" style="font-size: 18px; color: #0d6efd;"></i> | |
| <label class="form-label" style="color: #0d6efd; font-weight: bold; font-size: 18px; margin: 0;">Λεπτομέρειες Αιτούντων</label> | |
| <i class="fa-solid fa-graduation-cap" style="font-size: 18px; color: #0d6efd;"></i> | |
| </div> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td colspan="6"> | |
| <table class="table table-sm"> | |
| <thead> | |
| <tr style="background-color: #f5f5f5; border: 1px solid darkblue;"> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-user fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Προφίλ | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-signature fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Όνομα | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-signature fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Επώνυμο | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-calendar-plus fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ημερομηνία Αίτησης | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-graduation-cap fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Έτος Φοίτησης | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-phone fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Τηλεφωνο | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-comments fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Επικοινωνία | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-hand fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ενέργεια | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-hourglass-half fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Κατάσταση Αίτησης | |
| </th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| @if (studentDataCache == null) | |
| { | |
| <!-- Loading state --> | |
| <tr> | |
| <td colspan="9" class="text-center"> | |
| <div class="spinner-border text-primary" role="status"> | |
| <span class="sr-only">Φόρτωση...</span> | |
| </div> | |
| <p>Φόρτωση δεδομένων φοιτητών...</p> | |
| </td> | |
| </tr> | |
| } | |
| else if (companyThesisApplicantsMap.ContainsKey(companythesis.RNGForThesisUploadedAsCompany) | |
| && companyThesisApplicantsMap[companythesis.RNGForThesisUploadedAsCompany].Any()) | |
| { | |
| @foreach (var applicant in companyThesisApplicantsMap[companythesis.RNGForThesisUploadedAsCompany]) | |
| { | |
| var student = studentDataCache.TryGetValue(applicant.StudentEmailAppliedForThesis, out var s) ? s : null; | |
| var status = applicant.CompanyThesisStatusAppliedAtStudentSide ?? "N/A"; | |
| var companyStatus = applicant.CompanyThesisStatusAppliedAtCompanySide ?? "N/A"; | |
| <tr style="background-color: @(companyStatus == "Έχει γίνει Αποδοχή" ? "lightgreen" : | |
| companyStatus == "Έχει Απορριφθεί" ? "lightcoral" : | |
| companyStatus == "Απορρίφθηκε (Απόσυρση Θέσεως Από Εταιρία)" ? "coral" : | |
| companyStatus == "Αποσύρθηκε από τον φοιτητή" ? "lightyellow" : "transparent")"> | |
| <td> | |
| <a href="#" @onclick="() => ShowStudentDetailsInNameAsHyperlink(applicant.StudentUniqueIDAppliedForThesis)" | |
| title="Προφίλ Υποψήφιου Σπουδαστή"> | |
| <i class="fas fa-eye icon-button text-dark"></i> | |
| @if (student == null) | |
| { | |
| <span class="badge badge-warning ml-1">Δε βρέθηκε</span> | |
| } | |
| </a> | |
| </td> | |
| <td>@(student?.Name ?? "Δε βρέθηκε")</td> | |
| <td>@(student?.Surname ?? "Δε βρέθηκε")</td> | |
| <td>@applicant.DateTimeStudentAppliedForThesis.ToString("dd/MM/yyyy HH:mm")</td> | |
| <td>@(student?.StudyYear ?? "-")</td> | |
| <td>@(student?.Telephone ?? "-")</td> | |
| <td class="text-center"> | |
| @applicant.StudentEmailAppliedForThesis | |
| <a href="mailto:@applicant.StudentEmailAppliedForThesis" title="Αποστολή Email"> | |
| <i class="fas fa-envelope"></i> | |
| </a> | |
| </td> | |
| <td> | |
| @if (status == "Σε Επεξεργασία") | |
| { | |
| <div style="display: flex; gap: 10px; justify-content: center;"> | |
| <span @onclick="() => ConfirmAndAcceptStudentThesisApplicationAsCompany(applicant.RNGForCompanyThesisApplied, applicant.StudentUniqueIDAppliedForThesis)" | |
| title="Αποδοχή Αίτησης" style="cursor: pointer;"> | |
| <i class="fas fa-check action-icon accept-icon"></i> | |
| </span> | |
| <span @onclick="() => ConfirmAndRejectStudentThesisApplicationAsCompany(applicant.RNGForCompanyThesisApplied, applicant.StudentUniqueIDAppliedForThesis)" | |
| title="Απόρριψη Αίτησης" style="cursor: pointer;"> | |
| <i class="fas fa-times action-icon reject-icon"></i> | |
| </span> | |
| </div> | |
| } | |
| else | |
| { | |
| <span class="text">@status</span> | |
| } | |
| </td> | |
| <td> | |
| @if (companyStatus == "Επιτυχής") | |
| { | |
| <span style="color: green; font-weight: bold;">Έχει γίνει Αποδοχή</span> | |
| } | |
| else if (companyStatus == "Απορρίφθηκε") | |
| { | |
| <span style="color: red; font-weight: bold;">Έχει Απορριφθεί</span> | |
| } | |
| else | |
| { | |
| <span>@companyStatus</span> | |
| } | |
| </td> | |
| </tr> | |
| } | |
| } | |
| else | |
| { | |
| <tr> | |
| <td colspan="9" class="text-center text-danger"> | |
| <strong>Καμία Αίτηση για αυτήν την Πτυχιακή Εργασία ακόμη</strong> | |
| </td> | |
| </tr> | |
| } | |
| </tbody> | |
| </table> | |
| </td> | |
| </tr> | |
| } | |
| @if (expandedCompanyThesesForProfessorInterest.ContainsKey(companythesis.RNGForThesisUploadedAsCompany) && expandedCompanyThesesForProfessorInterest[companythesis.RNGForThesisUploadedAsCompany]) | |
| { | |
| <br/> | |
| <tr> | |
| <td colspan="9" style="padding: 0;"> | |
| <div style="display: flex; justify-content: space-between; align-items: center; height: 24px; line-height: 24px; width: 100%;"> | |
| <i class="fa-solid fa-user-tie" style="font-size: 18px; color: #0d6efd;"></i> | |
| <label class="form-label" style="color: #0d6efd; font-weight: bold; font-size: 18px; margin: 0;">Λεπτομέρειες Ενδιαφερόμενου Καθηγητή</label> | |
| <i class="fa-solid fa-user-tie" style="font-size: 18px; color: #0d6efd;"></i> | |
| </div> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td colspan="6"> | |
| <table class="table table-sm"> | |
| <thead> | |
| <tr style="background-color: #f5f5f5; border: 1px solid darkblue;"> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-user-tie fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Προφίλ | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-signature fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Όνοματεπώνυμο | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-envelope fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-phone fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Τηλέφωνο Εργασίας | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-phone fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Προσωπικό Τηλέφωνο | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-globe fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ιστότοπος | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-brands fa-linkedin fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| </th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| @if (professorDataCache == null) | |
| { | |
| <!-- Loading state --> | |
| <tr> | |
| <td colspan="7" class="text-center"> | |
| <div class="spinner-border text-primary" role="status"> | |
| <span class="sr-only">Φόρτωση...</span> | |
| </div> | |
| <p>Φόρτωση δεδομένων καθηγητών...</p> | |
| </td> | |
| </tr> | |
| } | |
| else if (companythesis.IsProfessorInteresetedInCompanyThesis) | |
| { | |
| var professor = professorDataCache.TryGetValue(companythesis.ProfessorEmailInterestedInCompanyThesis, out var p) ? p : null; | |
| <tr> | |
| <td> | |
| <a href="#" @onclick="() => ShowProfessorDetailsAtCompanyThesisInterest(companythesis)" | |
| title="Προβολή Στοιχείων Καθηγητή"> | |
| <i class="fas fa-eye icon-button text-dark"></i> | |
| @if (professor == null) | |
| { | |
| <span class="badge badge-warning ml-1">Δε βρέθηκε</span> | |
| } | |
| </a> | |
| </td> | |
| <td> | |
| @(professor?.ProfName ?? "Άγνωστο") @(professor?.ProfSurname ?? "Όνομα") | |
| </td> | |
| <td> | |
| @companythesis.ProfessorEmailInterestedInCompanyThesis | |
| <a href="mailto:@companythesis.ProfessorEmailInterestedInCompanyThesis" title="Αποστολή Email"> | |
| <i class="fas fa-envelope"></i> | |
| </a> | |
| </td> | |
| <td> | |
| @if (!string.IsNullOrWhiteSpace(professor?.ProfWorkTelephone)) | |
| { | |
| @professor.ProfWorkTelephone | |
| <a href="tel:@professor.ProfWorkTelephone" title="Κλήση"> | |
| <i class="fas fa-phone"></i> | |
| </a> | |
| } | |
| else | |
| { | |
| <span style="display: block; text-align: center; font-weight: bold; font-style: italic;"> | |
| Δεν Διατίθεται | |
| </span> | |
| } | |
| </td> | |
| <td> | |
| @if (professor?.ProfPersonalTelephoneVisibility ?? false) | |
| { | |
| @professor.ProfPersonalTelephone | |
| <a href="tel:@professor.ProfPersonalTelephone" title="Κλήση"> | |
| <i class="fas fa-phone"></i> | |
| </a> | |
| } | |
| else | |
| { | |
| <span style="display: block; text-align: center; font-weight: bold; font-style: italic;"> | |
| Δεν Διατίθεται | |
| </span> | |
| } | |
| </td> | |
| <td> | |
| @professor?.ProfPersonalWebsite | |
| @if (!string.IsNullOrWhiteSpace(professor?.ProfPersonalWebsite)) | |
| { | |
| <a href="@professor.ProfPersonalWebsite" target="_blank" title="Προβολή Ιστότοπου Καθηγητή"> | |
| <i class="fas fa-globe"></i> | |
| </a> | |
| } | |
| </td> | |
| <td> | |
| @professor?.ProfLinkedInSite | |
| @if (!string.IsNullOrWhiteSpace(professor?.ProfLinkedInSite)) | |
| { | |
| <a href="@professor.ProfLinkedInSite" target="_blank" title="Προβολή LinkedIn Καθηγητή"> | |
| <i class="fab fa-linkedin"></i> | |
| </a> | |
| } | |
| </td> | |
| </tr> | |
| } | |
| else | |
| { | |
| <tr> | |
| <td colspan="7" class="text-center text-danger"> | |
| <strong>Κανένας Καθηγητής δεν έχει εκδηλώσει ενδιαφέρον ακόμη</strong> | |
| </td> | |
| </tr> | |
| } | |
| </tbody> | |
| </table> | |
| </td> | |
| </tr> | |
| } | |
| @if (isModalVisibleToEditCompanyThesisDetails) | |
| { | |
| <div class="modal fade show" style="display: block;" tabindex="-1" role="dialog" aria-modal="true"> | |
| <div class="modal-dialog modal-lg" role="document"> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title" style="color: #007BFF;">@selectedCompanyThesis.CompanyThesisTitle</h5> | |
| <button type="button" class="close" @onclick="CloseCompanyThesisEditModal">×</button> | |
| </div> | |
| <div class="modal-body"> | |
| <!-- Modal content remains the same --> | |
| <div class="form-group"> | |
| <label for="editThesisTitle"><strong>Τίτλος Θέσης</strong></label> | |
| <input type="text" id="editThesisTitle" class="form-control" @bind="selectedCompanyThesis.CompanyThesisTitle" /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editSupervisor"><strong>Υπεύθυνος</strong></label> | |
| <input type="text" id="editSupervisor" class="form-control" @bind="selectedCompanyThesis.CompanyThesisCompanySupervisorFullName" /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editThesisDescription"><strong>Περιγραφή</strong></label> | |
| <textarea id="editThesisDescription" class="form-control" rows="4" @bind="selectedCompanyThesis.CompanyThesisDescriptionsUploaded"></textarea> | |
| </div> | |
| <br/> | |
| <!-- UPDATED: Areas with Subfields for Thesis --> | |
| <div class="form-group"> | |
| <label @onclick="ToggleCheckboxesForEditCompanyThesis" style="cursor: pointer; display: flex; align-items: center;"> | |
| <strong>Τομείς Πτυχιακής</strong> | |
| <span style="color: #1565c0; font-size: 0.9em; margin-left: 8px; display: flex; align-items: center;"> | |
| <i class="fas @(showCheckboxesForEditCompanyThesis ? "fa-chevron-up" : "fa-chevron-down")" style="margin-right: 4px;"></i> | |
| @(showCheckboxesForEditCompanyThesis ? "Κλείσιμο" : "Άνοιγμα") | |
| </span> | |
| </label> | |
| @if (showCheckboxesForEditCompanyThesis) | |
| { | |
| <div id="toggleCheckboxes" class="checkbox-container"> | |
| @foreach (var area in Areas) | |
| { | |
| <div class="area-container" style="margin-bottom: 8px; border: 2px solid #1565c0; border-radius: 4px; padding: 8px; background-color: #f8f9fa;"> | |
| <div class="form-check area-header"> | |
| <input type="checkbox" | |
| id="[email protected]" | |
| class="form-check-input" | |
| @onchange="(e) => OnAreaCheckedChangedForEditCompanyThesis(e, area)" | |
| checked="@IsAreaSelectedForEditCompanyThesis(area)" /> | |
| <label class="form-check-label area-label" | |
| for="[email protected]" | |
| @onclick="@(() => ToggleSubFieldsForEditCompanyThesis(area))" | |
| @onclick:stopPropagation="true" | |
| style="cursor: pointer; font-weight: bold; display: flex; align-items: center; justify-content: space-between; width: 100%; color: #1565c0;"> | |
| @area.AreaName | |
| <span class="expand-icon" style="font-size: 10px; transition: transform 0.2s; margin-left: 8px;">▶</span> | |
| </label> | |
| </div> | |
| @if (ExpandedAreasForEditCompanyThesis.Contains(area.Id)) | |
| { | |
| <div class="subfields-container" style="margin-top: 8px; margin-left: 20px; padding-left: 15px; border-left: 2px solid #1565c0;"> | |
| @if (!string.IsNullOrEmpty(area.AreaSubFields)) | |
| { | |
| var subFields = area.AreaSubFields.Split(',').Select(s => s.Trim()).ToList(); | |
| @foreach (var subField in subFields) | |
| { | |
| <div class="form-check subfield-checkbox" style="margin-bottom: 4px;"> | |
| <input type="checkbox" | |
| id="edit_thesis_subfield_@(area.Id)_@(subField)" | |
| class="form-check-input" | |
| @onchange="(e) => OnSubFieldCheckedChangedForEditCompanyThesis(e, area, subField)" | |
| checked="@IsSubFieldSelectedForEditCompanyThesis(area, subField)" /> | |
| <label class="form-check-label" for="edit_thesis_subfield_@(area.Id)_@(subField)" style="font-weight: normal; font-size: 0.9em;"> | |
| @subField | |
| </label> | |
| </div> | |
| } | |
| } | |
| </div> | |
| } | |
| </div> | |
| } | |
| </div> | |
| } | |
| </div> | |
| <br/> | |
| <div class="form-group"> | |
| <label for="editThesisSkills" @onclick="ToggleSkillsInEditCompanyThesisModalAsCompany" style="cursor: pointer;"> | |
| <strong>Απαιτούμενα Προσόντα</strong> | |
| <i class="fas @(showExpandedSkillsInCompanyThesisEditModalAsCompany ? "fa-chevron-up" : "fa-chevron-down")"></i> | |
| </label> | |
| @if (showExpandedSkillsInCompanyThesisEditModalAsCompany) | |
| { | |
| <div id="toggleCheckboxesSkills" class="checkbox-container"> | |
| @foreach (var skill in Skills) | |
| { | |
| <div class="form-check"> | |
| <input type="checkbox" | |
| id="[email protected]" | |
| class="form-check-input" | |
| @onchange="(e) => OnCheckedChangedForEditCompanyThesisSkills(e, skill)" | |
| checked="@(selectedCompanyThesis.CompanyThesisSkillsNeeded.Contains(skill.SkillName))" /> | |
| <label class="form-check-label" for="[email protected]">@skill.SkillName</label> | |
| </div> | |
| } | |
| </div> | |
| } | |
| </div> | |
| <br/> | |
| <div class="form-group"> | |
| <label for="editThesisDepartment"><strong>Τμήμα</strong></label> | |
| <input type="text" id="editThesisDepartment" class="form-control" @bind="selectedCompanyThesis.CompanyThesisDepartment" /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editThesisStartDate"><strong>Ημερομηνία Έναρξης</strong></label> | |
| <input type="date" id="editThesisStartDate" class="form-control" @bind="selectedCompanyThesis.CompanyThesisStartingDate" /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editThesisEmail"><strong>Email Επικοινωνίας</strong></label> | |
| <input type="email" id="editThesisEmail" class="form-control" @bind="selectedCompanyThesis.CompanyThesisContactPersonEmail" /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="editThesisPhone"><strong>Τηλέφωνο Επικοινωνίας</strong></label> | |
| <input type="tel" id="editThesisPhone" class="form-control" @bind="selectedCompanyThesis.CompanyThesisContactPersonTelephone" /> | |
| </div> | |
| </div> | |
| <div class="modal-footer"> | |
| <button type="button" class="btn btn-secondary" @onclick="CloseCompanyThesisEditModal">Ακύρωση</button> | |
| <button type="button" class="btn btn-primary" @onclick="SaveEditedCompanyThesis">Αποθήκευση</button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| } | |
| </tbody> | |
| </table> | |
| <br/> | |
| <!-- Pagination Controls --> | |
| <div class="d-flex justify-content-center align-items-center mt-3 gap-1"> | |
| <!-- First Page (<<) --> | |
| <span class="pagination-item @(currentPageForCompanyTheses == 1 ? "disabled" : "")" | |
| @onclick="@(() => GoToFirstPageForCompanyTheses())"> | |
| << | |
| </span> | |
| <!-- Previous Page (<) --> | |
| <span class="pagination-item @(currentPageForCompanyTheses == 1 ? "disabled" : "")" | |
| @onclick="@(() => PreviousPageForCompanyTheses())"> | |
| < | |
| </span> | |
| <!-- Page Numbers --> | |
| @foreach (var pageNum in GetVisiblePagesForCompanyTheses()) | |
| { | |
| @if (pageNum == -1) | |
| { | |
| <span class="pagination-ellipsis">...</span> | |
| } | |
| else | |
| { | |
| <span class="pagination-item @(pageNum == currentPageForCompanyTheses ? "active" : "")" | |
| @onclick="@(() => GoToPageForCompanyTheses(pageNum))"> | |
| @pageNum | |
| </span> | |
| } | |
| } | |
| <!-- Next Page (>) --> | |
| <span class="pagination-item @(currentPageForCompanyTheses == totalPagesForCompanyTheses ? "disabled" : "")" | |
| @onclick="@(() => NextPageForCompanyTheses())"> | |
| > | |
| </span> | |
| <!-- Last Page (>>) --> | |
| <span class="pagination-item @(currentPageForCompanyTheses == totalPagesForCompanyTheses ? "disabled" : "")" | |
| @onclick="@(() => GoToLastPageForCompanyTheses())"> | |
| >> | |
| </span> | |
| <!-- Page counter --> | |
| <span class="ms-3">Σελίδα @currentPageForCompanyTheses από @totalPagesForCompanyTheses</span> | |
| </div> | |
| } | |
| } | |
| <!-- SEARCH PROFESSOR THESES AS COMPANY --> | |
| <div class="mb-3 row-dark-gray mt-4"> | |
| <div class="d-flex justify-content-between align-items-center" @onclick="ToggleToSearchForUploadedProfessorThesesAsCompany" style="cursor: pointer;"> | |
| <label class="form-label" style="color: #FFF8DC;">• Αναζήτηση Πτυχιακών Από Καθηγητές •</label> | |
| <button class="btn btn-link" @onclick="ToggleToSearchForUploadedProfessorThesesAsCompany" @onclick:stopPropagation="true"> | |
| @if (isUploadedProfessorThesesVisibleAsCompany) | |
| { | |
| <span>−</span> <!-- Minus sign --> | |
| } | |
| else | |
| { | |
| <span>+</span> <!-- Plus sign --> | |
| } | |
| </button> | |
| </div> | |
| </div> | |
| @if (isUploadedProfessorThesesVisibleAsCompany) | |
| { | |
| <!-- Search Form --> | |
| <div class="row mb-3"> | |
| <!-- Professor Name with Autocomplete --> | |
| <div class="col-md-4 position-relative"> | |
| <label for="searchProfessorNameToFindThesesAsCompany" class="fw-bold">Όνομα Καθηγητή</label> | |
| <input type="text" | |
| id="searchProfessorNameToFindThesesAsCompany" | |
| class="form-control" | |
| @bind="searchProfessorNameToFindThesesAsCompany" | |
| @oninput="HandleProfessorNameInput" | |
| placeholder="Εισάγετε Όνομα Καθηγητή" /> | |
| <!-- Suggestions dropdown for Name --> | |
| <ul class="list-group position-absolute" | |
| style="z-index: 100; width: 100%; max-height: 150px; overflow-y: auto;" | |
| hidden="@(!professorNameSuggestions.Any())"> | |
| @foreach (var suggestion in professorNameSuggestions) | |
| { | |
| <li class="list-group-item list-group-item-action" | |
| @onclick="() => SelectProfessorNameSuggestion(suggestion)"> | |
| @suggestion | |
| </li> | |
| } | |
| </ul> | |
| </div> | |
| <!-- Professor Surname with Autocomplete --> | |
| <div class="col-md-4 position-relative"> | |
| <label for="searchProfessorSurnameToFindThesesAsCompany" class="fw-bold">Επώνυμο Καθηγητή</label> | |
| <input type="text" | |
| id="searchProfessorSurnameToFindThesesAsCompany" | |
| class="form-control" | |
| @bind="searchProfessorSurnameToFindThesesAsCompany" | |
| @oninput="HandleProfessorSurnameInput" | |
| placeholder="Εισάγετε Επώνυμο Καθηγητή" /> | |
| <!-- Suggestions dropdown for Surname --> | |
| <ul class="list-group position-absolute" | |
| style="z-index: 100; width: 100%; max-height: 150px; overflow-y: auto;" | |
| hidden="@(!professorSurnameSuggestions.Any())"> | |
| @foreach (var suggestion in professorSurnameSuggestions) | |
| { | |
| <li class="list-group-item list-group-item-action" | |
| @onclick="() => SelectProfessorSurnameSuggestion(suggestion)"> | |
| @suggestion | |
| </li> | |
| } | |
| </ul> | |
| </div> | |
| <div class="col-md-4"> | |
| <label for="searchProfessorThesisTitleToFindThesesAsCompany" class="fw-bold">Τίτλος Πτυχιακής</label> | |
| <input type="text" id="searchProfessorThesisTitleToFindThesesAsCompany" class="form-control" @bind="searchProfessorThesisTitleToFindThesesAsCompany" placeholder="Εισάγετε Τίτλο" /> | |
| </div> | |
| <div class="col-md-4 position-relative"> | |
| <label for="searchAreasToFindThesesAsCompany" class="fw-bold">Περιοχές Ενδιαφέροντος</label> | |
| <input | |
| type="text" | |
| id="searchAreasToFindThesesAsCompany" | |
| class="form-control" | |
| placeholder="Εισάγετε Περιοχές Ενδιαφέροντος" | |
| @bind="searchAreasInputToFindThesesAsCompany" | |
| @oninput="HandleAreasInputToFindThesesAsCompany" /> | |
| <!-- Suggestions Dropdown --> | |
| <ul class="list-group position-absolute" | |
| style="z-index: 100; width: 100%; max-height: 150px; overflow-y: auto;" | |
| hidden="@(!areaSuggestionsToFindThesesAsCompany.Any())"> | |
| @foreach (var suggestion in areaSuggestionsToFindThesesAsCompany) | |
| { | |
| <li class="list-group-item list-group-item-action" | |
| @onclick="() => SelectAreaSuggestionToFindThesesAsCompany(suggestion)"> | |
| @if (suggestion.Contains(" - ")) | |
| { | |
| var parts = suggestion.Split(new[] { " - " }, StringSplitOptions.None); | |
| <div> | |
| <span class="text-muted">@parts[0] - </span> | |
| <span class="fw-bold">@parts[1]</span> | |
| </div> | |
| } | |
| else | |
| { | |
| <div>@suggestion</div> | |
| } | |
| </li> | |
| } | |
| </ul> | |
| <!-- Selected Areas --> | |
| <div class="mt-3 selected-areas-container"> | |
| @if (selectedAreasToFindThesesAsCompany.Any()) | |
| { | |
| <ul class="list-group selected-areas-list"> | |
| @foreach (var area in selectedAreasToFindThesesAsCompany) | |
| { | |
| <li class="list-group-item d-flex justify-content-between align-items-center"> | |
| @if (area.Contains(" - ")) | |
| { | |
| var parts = area.Split(new[] { " - " }, StringSplitOptions.None); | |
| <span> | |
| <span class="text-muted">@parts[0] - </span> | |
| <span class="fw-bold">@parts[1]</span> | |
| </span> | |
| } | |
| else | |
| { | |
| <span>@area</span> | |
| } | |
| <button class="btn btn-danger btn-sm" @onclick="() => RemoveSelectedAreaToFindThesesAsCompany(area)"> | |
| <i class="fas fa-times"></i> | |
| </button> | |
| </li> | |
| } | |
| </ul> | |
| } | |
| </div> | |
| </div> | |
| <br/> | |
| <div class="col-md-4 position-relative"> | |
| <label for="searchSkillsToFindThesesAsCompany" class="fw-bold">Δεξιότητες</label> | |
| <input | |
| type="text" | |
| id="searchSkillsToFindThesesAsCompany" | |
| class="form-control" | |
| placeholder="Εισάγετε Δεξιότητες" | |
| @bind="searchSkillsInputToFindThesesAsCompany" | |
| @oninput="HandleSkillsInputToFindThesesAsCompany" /> | |
| <!-- Suggestions Dropdown --> | |
| <ul class="list-group position-absolute" | |
| style="z-index: 100; width: 100%; max-height: 150px; overflow-y: auto;" | |
| hidden="@(!skillSuggestionsToFindThesesAsCompany.Any())"> | |
| @foreach (var suggestion in skillSuggestionsToFindThesesAsCompany) | |
| { | |
| <li class="list-group-item list-group-item-action" | |
| @onclick="() => SelectSkillSuggestionToFindThesesAsCompany(suggestion)"> | |
| @suggestion | |
| </li> | |
| } | |
| </ul> | |
| <!-- Selected Skills --> | |
| <div class="mt-3 selected-skills-container"> | |
| @if (selectedSkillsToFindThesesAsCompany.Any()) | |
| { | |
| <ul class="list-group selected-skills-list"> | |
| @foreach (var skill in selectedSkillsToFindThesesAsCompany) | |
| { | |
| <li class="list-group-item d-flex justify-content-between align-items-center"> | |
| @skill | |
| <button class="btn btn-danger btn-sm" @onclick="() => RemoveSelectedSkillToFindThesesAsCompany(skill)"> | |
| <i class="fas fa-times"></i> | |
| </button> | |
| </li> | |
| } | |
| </ul> | |
| } | |
| </div> | |
| </div> | |
| <div class="col-md-4"> | |
| <label for="searchStartingDateToFindThesesAsCompany" class="fw-bold">Ξεκινάει Από</label> | |
| <input type="date" id="searchStartingDateToFindThesesAsCompany" class="form-control" @bind="searchStartingDateToFindThesesAsCompany" /> | |
| </div> | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-12"> | |
| <button class="modern-button" style="background-color: #2d3748; color: white; display: inline-flex; align-items: center;" @onclick="SearchProfessorThesesAsCompany"> | |
| <i class="fa-brands fa-searchengin" style="margin-right: 8px;"></i>Αναζήτηση | |
| </button> | |
| <button class="modern-button" style="background-color: #2d3748; color: white; display: inline-flex; align-items: center;" @onclick="ClearSearchFieldsForSearchProfessorThesesAsCompany"> | |
| <i class="fa-solid fa-broom" style="margin-right: 8px;"></i>Εκκαθάριση | |
| </button> | |
| </div> | |
| </div> | |
| <br/> | |
| <br/> | |
| @if (searchPerformedToFindThesesAsCompany) | |
| { | |
| @if (professorThesesResultsToFindThesesAsCompany.Any()) | |
| { | |
| <label style="color: #2d3748; font-weight: bold; font-size: 15px; display: block;">Αποτελέσματα ανά Σελίδα</label> | |
| <div class="input-group" style="max-width: 68px;"> <!-- Adjust width here --> | |
| <select class="form-select" @onchange="OnPageSizeChange_SearchForProfessorThesesAsCompany"> | |
| @foreach (var option in pageSizeOptions_SearchForProfessorThesesAsCompany) | |
| { | |
| <option value="@option" selected="@(itemsPerPage_ProfessorTheses == option)">@option</option> | |
| } | |
| </select> | |
| </div> | |
| <br/> | |
| <table class="table table-bordered"> | |
| <thead> | |
| <tr> | |
| <td colspan="9" style="padding: 0;"> | |
| <div style="display: flex; justify-content: space-between; align-items: center; height: 24px; line-height: 24px; width: 100%;"> | |
| <i class="fa-solid fa-magnifying-glass" style="font-size: 18px; color: #0d6efd;"></i> | |
| <label class="form-label" style="color: #0d6efd; font-weight: bold; font-size: 18px; margin: 0;">Αποτέλεσμα Αναζήτησης</label> | |
| <i class="fa-solid fa-magnifying-glass" style="font-size: 18px; color: #0d6efd;"></i> | |
| </div> | |
| </td> | |
| </tr> | |
| <tr style="background-color: lightgray; border: 2px solid black;"> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-chalkboard-user fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Επιβλέπων | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-font fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Τίτλος Πτυχιακής | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-calendar-plus fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ημερομηνία Δημιουργίας | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-circle-info fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Επισκόπηση | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-heart fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ένδειξη Ενδιαφέροντος | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-hourglass-half fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Κατάσταση | |
| </th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| @foreach (var thesis in GetPaginatedProfessorTheses_AsCompany()) | |
| { | |
| string rowColor = thesis.IsCompanyInterestedInProfessorThesisStatus == "Έχετε Αποδεχτεί" ? "lightgreen" : "transparent"; | |
| <tr style="background-color: @rowColor;"> | |
| <td> | |
| <a href="#" @onclick="() => ShowProfessorDetailsFromHyperlinkName(thesis.ProfessorEmailUsedToUploadThesis)" style="text-decoration: none;"> | |
| @(thesis.Professor != null ? $"{thesis.Professor.ProfName} {thesis.Professor.ProfSurname}" : "Άγνωστος Καθηγητής") | |
| </a> | |
| </td> | |
| <td>@thesis.ThesisTitle</td> | |
| <td>@thesis.ThesisUploadDateTime.ToShortDateString()</td> | |
| <td style="text-align: center;"> | |
| <i class="fa fa-eye" aria-hidden="true" style="cursor: pointer; color: blue;" @onclick="() => ShowThesisDetailsAsCompany(thesis)"></i> | |
| </td> | |
| <td style="text-align: center;"> | |
| @if (thesis.IsCompanyInteresetedInProfessorThesis) | |
| { | |
| // Check if the CURRENT company is the one who showed interest | |
| if (thesis.CompanyEmailInterestedInProfessorThesis == CurrentUserEmail) | |
| { | |
| if (thesis.IsCompanyInterestedInProfessorThesisStatus == "Έχετε Αποδεχτεί") | |
| { | |
| <span>Ολοκληρώθηκε</span> | |
| } | |
| else | |
| { | |
| <span>Έχετε Εκδηλώσει Ενδιαφέρον</span> | |
| } | |
| } | |
| else | |
| { | |
| // Another company has shown interest - show "Not Available" | |
| <span style="color: black;">Μη Διαθέσιμο</span> | |
| } | |
| } | |
| else if (thesis.IsCompanyInterestedInProfessorThesisStatus == "Δεν έχει γίνει Αποδοχή") | |
| { | |
| <i class="fas fa-check" @onclick="() => MarkInterestInProfessorThesis(thesis)" style="cursor: pointer;"></i> | |
| } | |
| else | |
| { | |
| <span>Αναμονή Αποδοχής</span> | |
| } | |
| </td> | |
| <td> | |
| @if (thesis.IsCompanyInteresetedInProfessorThesis) | |
| { | |
| if (thesis.CompanyEmailInterestedInProfessorThesis == CurrentUserEmail) | |
| { | |
| @thesis.IsCompanyInterestedInProfessorThesisStatus | |
| } | |
| else | |
| { | |
| <span style="display: block; text-align: center;">-</span> | |
| } | |
| } | |
| else | |
| { | |
| @thesis.IsCompanyInterestedInProfessorThesisStatus | |
| } | |
| </td> | |
| </tr> | |
| } | |
| </tbody> | |
| </table> | |
| <br/> | |
| <br/> | |
| <div class="d-flex justify-content-center align-items-center mt-3 gap-1"> | |
| <span class="pagination-item @(currentPage_ProfessorTheses == 1 ? "disabled" : "")" | |
| @onclick="GoToFirstPage_ProfessorTheses"> | |
| << | |
| </span> | |
| <span class="pagination-item @(currentPage_ProfessorTheses == 1 ? "disabled" : "")" | |
| @onclick="PreviousPage_ProfessorTheses"> | |
| < | |
| </span> | |
| @foreach (var pageNum in GetVisiblePages_ProfessorTheses_AsCompany()) | |
| { | |
| if (pageNum == -1) | |
| { | |
| <span class="pagination-ellipsis">...</span> | |
| } | |
| else | |
| { | |
| <span class="pagination-item @(pageNum == currentPage_ProfessorTheses ? "active" : "")" | |
| @onclick="@(() => GoToPage_ProfessorTheses(pageNum))"> | |
| @pageNum | |
| </span> | |
| } | |
| } | |
| <span class="pagination-item @(currentPage_ProfessorTheses == totalPages_ProfessorTheses ? "disabled" : "")" | |
| @onclick="NextPage_ProfessorTheses"> | |
| > | |
| </span> | |
| <span class="pagination-item @(currentPage_ProfessorTheses == totalPages_ProfessorTheses ? "disabled" : "")" | |
| @onclick="GoToLastPage_ProfessorTheses"> | |
| >> | |
| </span> | |
| <span class="ms-3"> | |
| Σελίδα @currentPage_ProfessorTheses από @totalPages_ProfessorTheses | |
| </span> | |
| </div> | |
| <br /> | |
| <br /> | |
| } | |
| else | |
| { | |
| <div class="alert alert-warning d-flex align-items-center" role="alert"> | |
| <i class="fas fa-exclamation-triangle me-2"></i> | |
| <div>Δεν βρέθηκε κάποιο αποτέλεσμα που να πληρεί τα κριτήρια της Αναζήτησης σας.</div> | |
| </div> | |
| <br /> | |
| <br /> | |
| } | |
| } | |
| } | |
| </div> | |
| @if (isThesisDetailEyeIconModalVisibleToSeeAsCompany && selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany != null) | |
| { | |
| <div class="modal fade show d-block" tabindex="-1" role="dialog" style="background-color: rgba(0,0,0,0.5);"> | |
| <div class="modal-dialog modal-dialog-centered" role="document"> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title" style="color: #4682B4;">@selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.ThesisTitle</h5> | |
| <button type="button" class="close" @onclick="() => isThesisDetailEyeIconModalVisibleToSeeAsCompany = false"> | |
| <span aria-hidden="true">×</span> | |
| </button> | |
| </div> | |
| <div class="modal-body"> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τμήμα ΕΚΠΑ</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-university text-dark me-2"></i> | |
| <span>@(selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.Professor?.ProfDepartment ?? "Άγνωστο Τμήμα")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Επιβλέπων Καθηγητής</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-user-tie text-primary me-2"></i> | |
| <span>@(selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.Professor != null ? | |
| $"{selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.Professor.ProfName} {selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.Professor.ProfSurname}" : | |
| "Άγνωστος Καθηγητής")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Email Καθηγητή</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-envelope text-dark me-2"></i> | |
| <span>@selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.ProfessorEmailUsedToUploadThesis</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewThesisDescription"><strong>Περιγραφή Πτυχιακής</strong></label> | |
| <textarea id="viewThesisDescription" class="form-control" readonly>@selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.ThesisDescription</textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewThesisAreas"><strong>Περιοχές Ενδιαφέροντος</strong></label> | |
| <textarea id="viewThesisAreas" class="form-control" readonly>@selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.ThesisAreas</textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewThesisSkills"><strong>Απαιτούμενες Δεξιότητες</strong></label> | |
| <textarea id="viewThesisSkills" class="form-control" readonly>@selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.ThesisSkills</textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Ημερομηνία Έναρξης Πτυχιακής</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-calendar-alt text-dark me-2"></i> | |
| <span>@selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.ThesisActivePeriod.ToString("dd/MM/yyyy")</span> | |
| </div> | |
| </div> | |
| @if (selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.IsCompanyInteresetedInProfessorThesis && | |
| selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.CompanyInterested != null) | |
| { | |
| <div class="form-group"> | |
| <label for="viewCompanyName" class="font-weight-bold text-primary"> | |
| <strong>Όνομα Ενδιαφερόμενης Εταιρίας</strong> | |
| </label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-industry text-primary me-2"></i> | |
| <span>@selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.CompanyInterested.CompanyName</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewCompanyEmail" class="font-weight-bold text-primary"> | |
| <strong>Email Ενδιαφερόμενης Εταιρίας</strong> | |
| </label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-envelope text-primary me-2"></i> | |
| <span>@selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.CompanyInterested.CompanyEmail</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label class="font-weight-bold text-primary"><strong>Τοποθεσία Ενδιαφερόμενης Εταιρίας</strong></label> | |
| <div class="form-control d-flex align-items-center mt-1" style="height: auto;"> | |
| <i class="fas fa-map-marker-alt" style="color: #dc3545; margin-right: 8px;"></i> | |
| <a href="https://www.google.com/maps/search/@selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.CompanyInterested.CompanyLocation" | |
| target="_blank" | |
| style="color: #007bff; text-decoration: underline; word-break: break-word;"> | |
| @selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.CompanyInterested.CompanyLocation | |
| </a> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label class="font-weight-bold text-primary"><strong>Ιστότοπος Ενδιαφερόμενης Εταιρίας</strong></label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-globe" style="color: #007bff; margin-right: 8px;"></i> | |
| <a href="@selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.CompanyInterested.CompanyWebsite" | |
| target="_blank" | |
| style="color: #007bff; text-decoration: underline; word-break: break-word;"> | |
| @selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.CompanyInterested.CompanyWebsite | |
| </a> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewCompanyDescription" class="font-weight-bold text-primary"><strong>Περιγραφή Ενδιαφερόμενης Εταιρίας</strong></label> | |
| <textarea id="viewCompanyDescription" class="form-control" readonly>@selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.CompanyInterested.CompanyDescription</textarea> | |
| </div> | |
| } | |
| <br/> | |
| <div class="form-group"> | |
| <label for="viewProfessorThesisAttachment"><strong>Αρχείο Πτυχιακής: </strong></label> | |
| @if (selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.ThesisAttachment != null) | |
| { | |
| <button class="btn btn-primary btn-sm" | |
| @onclick="() => DownloadProfessorThesisAttachmentWhenSearchForProfessorThesisAsCompany(selectedProfessorThesisToSeeDetailsOnEyeIconAsCompany.Id)" | |
| title="Λήψη Αρχείου"> | |
| <i class="fas fa-download"></i> Λήψη | |
| </button> | |
| } | |
| else | |
| { | |
| <span style="color: darkred;"><strong>Δεν Διατίθεται Συννημένο Αρχείο</strong></span> | |
| } | |
| </div> | |
| </div> | |
| <div class="modal-footer"> | |
| <button type="button" class="btn btn-secondary" @onclick="() => isThesisDetailEyeIconModalVisibleToSeeAsCompany = false">Κλείσιμο</button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| @if (isProfessorDetailModalVisible && selectedProfessorDetails != null) | |
| { | |
| <div class="modal fade show d-block" tabindex="-1" role="dialog" style="background-color: rgba(0,0,0,0.5);"> | |
| <div class="modal-dialog modal-lg modal-dialog-centered" role="document"> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title" style="color: #007BFF;"> | |
| @(selectedProfessorDetails.ProfName ?? "Δεν έχει Καθοριστεί") @(selectedProfessorDetails.ProfSurname ?? "") | |
| </h5> | |
| <button type="button" class="btn-close" @onclick="CloseProfessorModalFromHyperlinkName" aria-label="Κλείσιμο"></button> | |
| </div> | |
| <div class="modal-body"> | |
| <!-- Profile Picture --> | |
| <div class="form-group text-center"> | |
| @if (selectedProfessorDetails.ProfImage != null && selectedProfessorDetails.ProfImage.Length > 0) | |
| { | |
| var base64Image = Convert.ToBase64String(selectedProfessorDetails.ProfImage); | |
| <img src="data:image/jpeg;base64,@base64Image" alt="Φωτογραφία Προφίλ Καθηγητή" | |
| style="max-width: 150px; max-height: 150px; border-radius: 50%; object-fit: cover;" /> | |
| } | |
| else | |
| { | |
| <p>Δεν υπάρχει φωτογραφία Προφίλ</p> | |
| } | |
| </div> | |
| <!-- Professor Email --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Email</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-envelope" style="color: #007bff; margin-right: 8px;"></i> | |
| <span>@(selectedProfessorDetails.ProfEmail ?? "Δεν έχει Καθοριστεί")</span> | |
| </div> | |
| </div> | |
| <!-- Professor University and Department --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Πανεπιστήμιο</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-university" style="color: #007bff; margin-right: 8px;"></i> | |
| <span>@(selectedProfessorDetails.ProfUniversity ?? "Δεν έχει Καθοριστεί")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τμήμα</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fa-solid fa-building" style="color: #6c757d; margin-right: 8px;"></i> | |
| <span>@(selectedProfessorDetails.ProfDepartment ?? "Δεν έχει Καθοριστεί")</span> | |
| </div> | |
| </div> | |
| <!-- Professor Vahmida Department --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Βαθμίδα ΔΕΠ</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fa-solid fa-user-tie" style="color: #6c757d; margin-right: 8px;"></i> | |
| <span>@(selectedProfessorDetails.ProfVahmidaDEP ?? "Δεν έχει Καθοριστεί")</span> | |
| </div> | |
| </div> | |
| <!-- Professor Work and Personal Telephone --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τηλέφωνο Εργασίας</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fa-solid fa-phone" style="color: #28a745; margin-right: 8px;"></i> | |
| <span>@(selectedProfessorDetails.ProfWorkTelephone ?? "Δεν έχει Καθοριστεί")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Προσωπικό Τηλέφωνο</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fa-solid fa-phone" style="color: #28a745; margin-right: 8px;"></i> | |
| @if (selectedProfessorDetails.ProfPersonalTelephoneVisibility) | |
| { | |
| <span>@(selectedProfessorDetails.ProfPersonalTelephone ?? "Δεν έχει Καθοριστεί")</span> | |
| } | |
| else | |
| { | |
| <span>Δεν Διατίθεται</span> | |
| } | |
| </div> | |
| </div> | |
| <!-- Professor Personal Website --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Προσωπική Ιστοσελίδα</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fa-solid fa-globe" style="color: #007bff; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrWhiteSpace(selectedProfessorDetails.ProfPersonalWebsite)) | |
| { | |
| <a href="@selectedProfessorDetails.ProfPersonalWebsite" target="_blank" class="flex-grow-1 text-truncate" style="text-decoration:none; color:#007bff;"> | |
| @selectedProfessorDetails.ProfPersonalWebsite | |
| </a> | |
| } | |
| else | |
| { | |
| <span class="flex-grow-1 text-muted">Δεν Διατίθεται</span> | |
| } | |
| </div> | |
| </div> | |
| <!-- Professor LinkedIn Site --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">LinkedIn</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fab fa-linkedin" style="color: #0A66C2; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrWhiteSpace(selectedProfessorDetails.ProfLinkedInSite)) | |
| { | |
| <a href="@selectedProfessorDetails.ProfLinkedInSite" target="_blank" class="flex-grow-1 text-truncate" style="text-decoration:none; color:#0A66C2;"> | |
| @selectedProfessorDetails.ProfLinkedInSite | |
| </a> | |
| } | |
| else | |
| { | |
| <span class="flex-grow-1 text-muted">Δεν Διατίθεται</span> | |
| } | |
| </div> | |
| </div> | |
| <!-- Professor Scholar Profile --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Scholar Profile</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-graduation-cap" style="color: #4285F4; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrWhiteSpace(selectedProfessorDetails.ProfScholarProfile)) | |
| { | |
| <a href="@selectedProfessorDetails.ProfScholarProfile" target="_blank" class="flex-grow-1 text-truncate" style="text-decoration:none; color:#4285F4;"> | |
| @selectedProfessorDetails.ProfScholarProfile | |
| </a> | |
| } | |
| else | |
| { | |
| <span class="flex-grow-1 text-muted">Δεν Διατίθεται</span> | |
| } | |
| </div> | |
| </div> | |
| <!-- Professor ORCID Profile --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">ORCID Profile</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-id-card" style="color: #A6CE39; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrWhiteSpace(selectedProfessorDetails.ProfOrchidProfile)) | |
| { | |
| <a href="@selectedProfessorDetails.ProfOrchidProfile" target="_blank" class="flex-grow-1 text-truncate" style="text-decoration:none; color:#A6CE39;"> | |
| @selectedProfessorDetails.ProfOrchidProfile | |
| </a> | |
| } | |
| else | |
| { | |
| <span class="flex-grow-1 text-muted">Δεν Διατίθεται</span> | |
| } | |
| </div> | |
| </div> | |
| <!-- Professor General Field of Work --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Γενικός Τομέας Εργασίας</label> | |
| <textarea class="form-control" readonly>@(selectedProfessorDetails.ProfGeneralFieldOfWork ?? "Δεν έχει Καθοριστεί")</textarea> | |
| </div> | |
| <!-- Professor Personal Description --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Προσωπική Περιγραφή</label> | |
| <textarea class="form-control" readonly>@(selectedProfessorDetails.ProfPersonalDescription ?? "Δεν έχει Καθοριστεί")</textarea> | |
| </div> | |
| </div> | |
| <div class="modal-footer"> | |
| <button type="button" class="btn btn-secondary" @onclick="CloseProfessorModalFromHyperlinkName"> | |
| <i class="fas fa-times mr-2"></i>Κλείσιμο | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| @if (showProfessorModal && selectedProfessorToShowDetailsForInterestinCompanyEvent != null) | |
| { | |
| <div class="modal fade show d-block" tabindex="-1" role="dialog" style="background-color: rgba(0,0,0,0.5);"> | |
| <div class="modal-dialog modal-lg modal-dialog-centered" role="document"> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title" style="color: #007BFF;"> | |
| @selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfName | |
| @selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfSurname | |
| </h5> | |
| <button type="button" class="btn-close" @onclick="CloseProfessorDetailsModal" aria-label="Κλείσιμο"></button> | |
| </div> | |
| <div class="modal-body"> | |
| <!-- Profile Picture --> | |
| <div class="form-group text-center"> | |
| @if (selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfImage != null) | |
| { | |
| var base64Image = Convert.ToBase64String(selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfImage); | |
| <img src="data:image/jpeg;base64,@base64Image" alt="Φωτογραφία Προφίλ Καθηγητή" | |
| style="max-width: 150px; max-height: 150px; border-radius: 50%; object-fit: cover;" /> | |
| } | |
| else | |
| { | |
| <p>Δεν υπάρχει φωτογραφία Προφίλ</p> | |
| } | |
| </div> | |
| <!-- Professor Email --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Email</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-envelope" style="color: #007bff; margin-right: 8px;"></i> | |
| <span>@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfEmail</span> | |
| </div> | |
| </div> | |
| <!-- Professor University and Department --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Πανεπιστήμιο</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-university" style="color: #007bff; margin-right: 8px;"></i> | |
| <span>@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfUniversity</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τμήμα</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fa-solid fa-building" style="color: #6c757d; margin-right: 8px;"></i> | |
| <span>@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfDepartment</span> | |
| </div> | |
| </div> | |
| <!-- Professor Vahmida Department --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Βαθμίδα ΔΕΠ</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fa-solid fa-user-tie" style="color: #6c757d; margin-right: 8px;"></i> | |
| <span>@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfVahmidaDEP</span> | |
| </div> | |
| </div> | |
| <!-- Professor Work and Personal Telephone --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τηλέφωνο Εργασίας</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fa-solid fa-phone" style="color: #28a745; margin-right: 8px;"></i> | |
| <span>@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfWorkTelephone</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Προσωπικό Τηλέφωνο</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fa-solid fa-phone" style="color: #28a745; margin-right: 8px;"></i> | |
| @if (selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfPersonalTelephoneVisibility) | |
| { | |
| <span>@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfPersonalTelephone</span> | |
| } | |
| else | |
| { | |
| <span>Δεν Διατίθεται</span> | |
| } | |
| </div> | |
| </div> | |
| <!-- Professor Personal Website --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Προσωπική Ιστοσελίδα</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fa-solid fa-globe" style="color: #007bff; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrWhiteSpace(selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfPersonalWebsite)) | |
| { | |
| <a href="@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfPersonalWebsite" | |
| target="_blank" | |
| class="flex-grow-1 text-truncate" | |
| style="text-decoration:none; color:#007bff;"> | |
| @selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfPersonalWebsite | |
| </a> | |
| } | |
| else | |
| { | |
| <span class="flex-grow-1 text-muted">Δεν Διατίθεται</span> | |
| } | |
| </div> | |
| </div> | |
| <!-- Professor LinkedIn Site --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">LinkedIn</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fab fa-linkedin" style="color: #0A66C2; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrWhiteSpace(selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfLinkedInSite)) | |
| { | |
| <a href="@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfLinkedInSite" | |
| target="_blank" | |
| class="flex-grow-1 text-truncate" | |
| style="text-decoration:none; color:#0A66C2;"> | |
| @selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfLinkedInSite | |
| </a> | |
| } | |
| else | |
| { | |
| <span class="flex-grow-1 text-muted">Δεν Διατίθεται</span> | |
| } | |
| </div> | |
| </div> | |
| <!-- Professor Scholar Profile --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Scholar Profile</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-graduation-cap" style="color: #4285F4; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrWhiteSpace(selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfScholarProfile)) | |
| { | |
| <a href="@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfScholarProfile" | |
| target="_blank" | |
| class="flex-grow-1 text-truncate" | |
| style="text-decoration:none; color:#4285F4;"> | |
| @selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfScholarProfile | |
| </a> | |
| } | |
| else | |
| { | |
| <span class="flex-grow-1 text-muted">Δεν Διατίθεται</span> | |
| } | |
| </div> | |
| </div> | |
| <!-- Professor ORCID Profile --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">ORCID Profile</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-id-card" style="color: #A6CE39; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrWhiteSpace(selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfOrchidProfile)) | |
| { | |
| <a href="@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfOrchidProfile" | |
| target="_blank" | |
| class="flex-grow-1 text-truncate" | |
| style="text-decoration:none; color:#A6CE39;"> | |
| @selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfOrchidProfile | |
| </a> | |
| } | |
| else | |
| { | |
| <span class="flex-grow-1 text-muted">Δεν Διατίθεται</span> | |
| } | |
| </div> | |
| </div> | |
| <!-- Professor General Field of Work --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Πεδίο Εργασίας</label> | |
| <textarea class="form-control" readonly>@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfGeneralFieldOfWork</textarea> | |
| </div> | |
| <!-- Professor Personal Description --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Προσωπική Περιγραφή</label> | |
| <textarea class="form-control" rows="3" readonly>@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfPersonalDescription</textarea> | |
| </div> | |
| </div> | |
| <div class="modal-footer"> | |
| <button type="button" class="btn btn-secondary" @onclick="CloseProfessorDetailsModal"> | |
| <i class="fas fa-times mr-2"></i>Κλείσιμο | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| @if (isModalVisibleToShowCompanyThesisDetails && currentThesis != null) | |
| { | |
| <div class="modal fade show d-block" tabindex="-1" role="dialog" style="background-color: rgba(0,0,0,0.5);"> | |
| <div class="modal-dialog modal-lg modal-dialog-centered" role="document"> | |
| <!-- Modal size set to large and centered --> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title" style="color: #4682B4;">@currentThesis.CompanyThesisTitle</h5> | |
| <button type="button" class="close" @onclick="CloseModalForCompanyThesis"> | |
| <span>×</span> | |
| </button> | |
| </div> | |
| <div class="modal-body"> | |
| @* | |
| <div class="form-group"> | |
| <label for="viewThesisTitle"><strong>Τίτλος Θέσης</strong></label> | |
| <input type="text" id="viewThesisTitle" class="form-control" value="@currentThesis.CompanyThesisTitle" readonly /> | |
| </div> | |
| *@ | |
| <div class="form-group"> | |
| <label for="viewThesisDescription"><strong>Περιγραφή</strong></label> | |
| <textarea id="viewThesisDescription" class="form-control" readonly>@currentThesis.CompanyThesisDescriptionsUploaded</textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewThesisAreas"><strong>Τομείς</strong></label> | |
| <textarea id="viewThesisAreas" class="form-control" readonly>@currentThesis.CompanyThesisAreasUpload</textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewThesisSkills"><strong>Απαιτούμενα Προσόντα</strong></label> | |
| <textarea id="viewThesisSkills" class="form-control" readonly>@currentThesis.CompanyThesisSkillsNeeded</textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewThesisSupervisor" style="font-weight: bold;">Επόπτης</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-user-tie" style="color: #007bff; margin-right: 8px;"></i> | |
| <span>@currentThesis.CompanyThesisCompanySupervisorFullName</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewThesisStatus"><strong>Κατάσταση</strong></label> | |
| <input type="text" id="viewThesisStatus" class="form-control" value="@currentThesis.CompanyThesisStatus" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewThesisDepartment" style="font-weight: bold;">Τμήμα</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fa-solid fa-building" style="color: #6c757d; margin-right: 8px;"></i> | |
| <span>@(!string.IsNullOrEmpty(currentThesis.CompanyThesisDepartment) ? currentThesis.CompanyThesisDepartment : "Δεν έχει Καθοριστεί")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewThesisContactEmail" style="font-weight: bold;">Email Επικοινωνίας</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-envelope" style="color: #007bff; margin-right: 8px;"></i> | |
| <span>@currentThesis.CompanyThesisContactPersonEmail</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewThesisContactPhone" style="font-weight: bold;">Τηλέφωνο Επικοινωνίας</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-phone-alt" style="color: #28a745; margin-right: 8px;"></i> | |
| <span>@currentThesis.CompanyThesisContactPersonTelephone</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewThesisUploadDate" style="font-weight: bold;">Ημερομηνία Δημιουργίας</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-calendar-alt" style="color: #17a2b8; margin-right: 8px;"></i> | |
| <span>@currentThesis.CompanyThesisUploadDateTime.ToString("yyyy-MM-dd")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewThesisStartingDate" style="font-weight: bold;">Ημερομηνία Έναρξης</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-calendar-alt" style="color: #17a2b8; margin-right: 8px;"></i> | |
| <span>@currentThesis.CompanyThesisStartingDate.ToString("yyyy-MM-dd")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewThesisProfessorSurname" style="color: #87CEEB; font-weight: bold;"> | |
| <i class="fas fa-user-graduate" style="margin-right: 6px;"></i>Εκδήλωση Ενδιαφέροντος από Καθηγητή | |
| </label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-chalkboard-teacher" style="color: #007bff; margin-right: 8px;"></i> | |
| @if (currentThesis.ProfessorInterested != null) | |
| { | |
| <span>@currentThesis.ProfessorInterested.ProfName @currentThesis.ProfessorInterested.ProfSurname</span> | |
| } | |
| else if (!string.IsNullOrWhiteSpace(currentThesis.ProfessorEmailInterestedInCompanyThesis)) | |
| { | |
| <span>Καθηγητής με email: @currentThesis.ProfessorEmailInterestedInCompanyThesis</span> | |
| } | |
| else | |
| { | |
| <span style="color: #6c757d;">Δεν έχει γίνει Ένδειξη Ενδιαφέροντος από Καθηγητή</span> | |
| } | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewThesisProfessorEmail" style="color: #87CEEB; font-weight: bold;"> | |
| <i class="fas fa-envelope" style="margin-right: 6px;"></i>Email Ενδιαφερόμενου Καθηγητή | |
| </label> | |
| <input type="email" id="viewThesisProfessorEmail" class="form-control" value="@currentThesis.ProfessorEmailInterestedInCompanyThesis" readonly /> | |
| </div> | |
| </div> | |
| <div class="modal-footer"> | |
| <button type="button" class="btn btn-secondary" @onclick="CloseModalForCompanyThesis">Κλείσιμο</button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| @if(isModalVisibleToShowprofessorDetailsAtCompanyThesisInterest) | |
| { | |
| <div class="modal fade show d-block" tabindex="-1" role="dialog" style="background-color: rgba(0,0,0,0.5);"> | |
| <div class="modal-dialog modal-lg modal-dialog-centered" role="document"> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title" style="color: #007BFF;"> | |
| @currentProfessorDetails.ProfName @currentProfessorDetails.ProfSurname | |
| </h5> | |
| <button type="button" class="btn-close" @onclick="CloseModalForProfessorDetails" aria-label="Κλείσιμο"></button> | |
| </div> | |
| <div class="modal-body"> | |
| <!-- Display student details here --> | |
| <div class="form-group text-center"> | |
| @if (currentProfessorDetails?.ProfImage != null && currentProfessorDetails.ProfImage.Length > 0) | |
| { | |
| var base64Image = Convert.ToBase64String(currentProfessorDetails.ProfImage); | |
| <img src="data:image/jpeg;base64,@base64Image" alt="Φωτογραφία Προφίλ Καθηγητή" | |
| style="max-width: 150px; max-height: 150px; border-radius: 50%; object-fit: cover;" /> | |
| } | |
| else | |
| { | |
| <p>Δεν υπάρχει φωτογραφία Προφίλ</p> | |
| } | |
| </div> | |
| <!-- Professor Name and Surname --> | |
| @* | |
| <div class="form-group"> | |
| <label for="viewThesisTitle">Όνομα</label> | |
| <input type="text" id="viewThesisTitle" class="form-control" value="@currentProfessorDetails.ProfName" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewThesisDescription">Επώνυμο</label> | |
| <input type="text" id="viewThesisDescription" class="form-control" value="@currentProfessorDetails.ProfSurname" readonly /> | |
| </div> | |
| *@ | |
| <!-- Professor Email --> | |
| <div class="form-group"> | |
| <label for="viewProfessorEmail" style="font-weight: bold;">Email</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-envelope" style="color: #007bff; margin-right: 8px;"></i> | |
| <input type="text" id="viewProfessorEmail" class="border-0 flex-grow-1" | |
| value="@currentProfessorDetails.ProfEmail" readonly /> | |
| </div> | |
| </div> | |
| <!-- Professor University and Department --> | |
| <div class="form-group"> | |
| <label for="viewProfessorUniversity" style="font-weight: bold;">Πανεπιστήμιο</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-university" style="color: #007bff; margin-right: 8px;"></i> | |
| <input type="text" id="viewProfessorUniversity" class="border-0 flex-grow-1" | |
| value="@currentProfessorDetails.ProfUniversity" readonly /> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewProfessorDepartment" style="font-weight: bold;">Τμήμα</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fa-solid fa-building" style="color: #6c757d; margin-right: 8px;"></i> | |
| <input type="text" id="viewProfessorDepartment" class="border-0 flex-grow-1" | |
| value="@currentProfessorDetails.ProfDepartment" readonly /> | |
| </div> | |
| </div> | |
| <!-- Professor Vahmida Department --> | |
| <div class="form-group"> | |
| <label for="viewProfessorVahmida" style="font-weight: bold;">Βαθμίδα ΔΕΠ</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fa-solid fa-user-tie" style="color: #6c757d; margin-right: 8px;"></i> | |
| <input type="text" id="viewProfessorVahmida" class="border-0 flex-grow-1" | |
| value="@currentProfessorDetails.ProfVahmidaDEP" readonly /> | |
| </div> | |
| </div> | |
| <!-- Professor Work and Personal Telephone --> | |
| <div class="form-group"> | |
| <label for="viewProfessorWorkTelephone" style="font-weight: bold;">Τηλέφωνο Εργασίας</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fa-solid fa-phone" style="color: #28a745; margin-right: 8px;"></i> | |
| <input type="text" id="viewProfessorWorkTelephone" class="border-0 flex-grow-1" | |
| value="@currentProfessorDetails.ProfWorkTelephone" readonly /> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label for="viewProfessorPersonalTelephone" style="font-weight: bold;">Προσωπικό Τηλέφωνο</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fa-solid fa-phone" style="color: #28a745; margin-right: 8px;"></i> | |
| @if (currentProfessorDetails.ProfPersonalTelephoneVisibility) | |
| { | |
| <input type="text" id="viewProfessorPersonalTelephone" class="border-0 flex-grow-1" | |
| value="@currentProfessorDetails.ProfPersonalTelephone" readonly /> | |
| } | |
| else | |
| { | |
| <input type="text" id="viewProfessorPersonalTelephone" class="border-0 flex-grow-1" | |
| value="Δεν Διατίθεται" readonly /> | |
| } | |
| </div> | |
| </div> | |
| <!-- Professor Personal Website --> | |
| <div class="form-group"> | |
| <label for="viewProfessorWebsite" style="font-weight: bold;">Ιστότοπος</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fa-solid fa-globe" style="color: #007bff; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrWhiteSpace(currentProfessorDetails.ProfPersonalWebsite)) | |
| { | |
| <a href="@currentProfessorDetails.ProfPersonalWebsite" target="_blank" class="flex-grow-1 text-truncate" style="text-decoration:none; color:#007bff;"> | |
| @currentProfessorDetails.ProfPersonalWebsite | |
| </a> | |
| } | |
| else | |
| { | |
| <span class="flex-grow-1 text-muted">Δεν Διατίθεται</span> | |
| } | |
| </div> | |
| </div> | |
| <!-- Professor LinkedIn Site --> | |
| <div class="form-group"> | |
| <label for="viewProfessorLinkedIn" style="font-weight: bold;">LinkedIn</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fab fa-linkedin" style="color: #0A66C2; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrWhiteSpace(currentProfessorDetails.ProfLinkedInSite)) | |
| { | |
| <a href="@currentProfessorDetails.ProfLinkedInSite" target="_blank" class="flex-grow-1 text-truncate" style="text-decoration:none; color:#0A66C2;"> | |
| @currentProfessorDetails.ProfLinkedInSite | |
| </a> | |
| } | |
| else | |
| { | |
| <span class="flex-grow-1 text-muted">Δεν Διατίθεται</span> | |
| } | |
| </div> | |
| </div> | |
| <!-- Professor Scholar Profile --> | |
| <div class="form-group"> | |
| <label for="viewProfessorScholarProfile" style="font-weight: bold;">Scholar Profile</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-graduation-cap" style="color: #4285F4; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrWhiteSpace(currentProfessorDetails.ProfScholarProfile)) | |
| { | |
| <a href="@currentProfessorDetails.ProfScholarProfile" target="_blank" class="flex-grow-1 text-truncate" style="text-decoration:none; color:#4285F4;"> | |
| @currentProfessorDetails.ProfScholarProfile | |
| </a> | |
| } | |
| else | |
| { | |
| <span class="flex-grow-1 text-muted">Δεν Διατίθεται</span> | |
| } | |
| </div> | |
| </div> | |
| <!-- Professor ORCID Profile --> | |
| <div class="form-group"> | |
| <label for="viewProfessorOrchidProfile" style="font-weight: bold;">ORCID Profile</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-id-card" style="color: #A6CE39; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrWhiteSpace(currentProfessorDetails.ProfOrchidProfile)) | |
| { | |
| <a href="@currentProfessorDetails.ProfOrchidProfile" target="_blank" class="flex-grow-1 text-truncate" style="text-decoration:none; color:#A6CE39;"> | |
| @currentProfessorDetails.ProfOrchidProfile | |
| </a> | |
| } | |
| else | |
| { | |
| <span class="flex-grow-1 text-muted">Δεν Διατίθεται</span> | |
| } | |
| </div> | |
| </div> | |
| <!-- Professor General Field of Work (Areas) --> | |
| <div class="form-group"> | |
| <label for="viewProfessorFieldOfWork">Γενικός Τομέας Εργασίας</label> | |
| <textarea id="viewProfessorFieldOfWork" class="form-control" readonly>@currentProfessorDetails.ProfGeneralFieldOfWork</textarea> | |
| </div> | |
| <!-- Professor General Skills --> | |
| <div class="form-group"> | |
| <label for="viewProfessorSkills">Γενικές Δεξιότητες</label> | |
| <textarea id="viewProfessorSkills" class="form-control" readonly>@currentProfessorDetails.ProfGeneralSkills</textarea> | |
| </div> | |
| <!-- Professor Personal Description --> | |
| <div class="form-group"> | |
| <label for="viewProfessorDescription">Προσωπική Περιγραφή</label> | |
| <textarea id="viewProfessorDescription" class="form-control" readonly>@currentProfessorDetails.ProfPersonalDescription</textarea> | |
| </div> | |
| @* VGIKE 20/2 ISWS XREIASTEI NA MPEI KAI CV OTAN KANEI AITISI GIA COMPANY THESIS | |
| <!-- Professor CV Attachment --> | |
| <div class="form-group"> | |
| <label for="viewProfessorCV">Βιογραφικό</label> | |
| @if (currentProfessorDetails.ProfCVAttachment != null) | |
| { | |
| <a href="data:application/pdf;base64,@Convert.ToBase64String(currentProfessorDetails.ProfCVAttachment)" target="_blank" class="btn btn-primary"> | |
| <i class="fas fa-download"></i> Λήψη | |
| </a> | |
| } | |
| else | |
| { | |
| <span>Δεν υπάρχει συνημμένο CV</span> | |
| } | |
| </div> | |
| *@ | |
| </div> | |
| <div class="modal-footer"> | |
| <button type="button" class="btn btn-secondary" @onclick="CloseModalForProfessorDetails">Κλείσιμο</button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| @*---------------------------------------------------------------------------------------------------------- COMPANY THESIS END------------------------------------------------------------------------------------------------------------*@ | |
| @*----------------------------------------------------------------------------------------------------------COMPANY EVENTS START------------------------------------------------------------------------------------------------------------*@ | |
| <!-- COMPANY EVENTS tab content --> | |
| <div class="tab-pane fade" id="events" role="tabpanel" aria-labelledby="events-tab"> | |
| <div class="mb-3 row-dark-gray"> | |
| <div class="calendar-section"> | |
| <strong> - Ημερολόγιο Εκδηλώσεων - </strong> | |
| <div> | |
| <!-- CALENDAR component --> | |
| <div class="calendar"> | |
| <div class="calendar-header"> | |
| <h2>@currentMonth.ToString("MMMM yyyy", CultureInfo.GetCultureInfo("el-GR"))</h2> | |
| </div> | |
| <div class="calendar-grid"> | |
| <!-- Days of the week header in Greek --> | |
| <div class="day-header">Δ</div> | |
| <div class="day-header">Τ</div> | |
| <div class="day-header">Τ</div> | |
| <div class="day-header">Π</div> | |
| <div class="day-header">Π</div> | |
| <div class="day-header">Σ</div> | |
| <div class="day-header">Κ</div> | |
| @for (int i = 0; i < adjustedFirstDayOfMonth; i++) | |
| { | |
| <div class="day-cell empty-cell"></div> | |
| } | |
| @for (int i = 1; i <= daysInCurrentMonth; i++) | |
| { | |
| DateTime dayDate = new DateTime(currentMonth.Year, currentMonth.Month, i); | |
| // Filter events by status "Δημοσιευμένη" | |
| var companyEvents = eventsForDate.ContainsKey(i) | |
| ? eventsForDate[i].Where(e => e.CompanyEventStatus == "Δημοσιευμένη").ToList() | |
| : new List<CompanyEvent>(); | |
| var professorEvents = eventsForDateForProfessors.ContainsKey(i) | |
| ? eventsForDateForProfessors[i].Where(e => e.ProfessorEventStatus == "Δημοσιευμένη").ToList() | |
| : new List<ProfessorEvent>(); | |
| bool hasPublishedEvent = companyEvents.Any() || professorEvents.Any(); | |
| string dayCellClass = "day-cell"; | |
| // Check if this day is today's date | |
| if (dayDate.Date == DateTime.Today.Date) | |
| { | |
| dayCellClass += " today"; | |
| } | |
| // Check if this day should be highlighted | |
| if (i == highlightedDay) | |
| { | |
| dayCellClass += " highlighted"; | |
| } | |
| // Add event-day class if this day has published events | |
| if (hasPublishedEvent) | |
| { | |
| dayCellClass += " event-day"; | |
| } | |
| <div class="@dayCellClass" @onclick="() => OnDateClicked(dayDate)"> | |
| <span>@i</span> | |
| @if (hasPublishedEvent) | |
| { | |
| <div class="event-indicators"> | |
| @if (companyEvents.Any()) | |
| { | |
| <span class="company-indicator">● (@companyEvents.Count)</span> | |
| } | |
| @if (professorEvents.Any()) | |
| { | |
| <span class="professor-indicator">● (@professorEvents.Count)</span> | |
| } | |
| </div> | |
| } | |
| </div> | |
| } | |
| </div> | |
| <!-- Pagination buttons to navigate between months --> | |
| <div class="pagination"> | |
| <button @onclick="ShowPreviousMonth" class="btn btn-small">◀</button> | |
| <button @onclick="ShowNextMonth" class="btn btn-small">▶</button> | |
| </div> | |
| <!-- Legend section --> | |
| <div class="calendar-legend"> | |
| <div class="legend-item"> | |
| <span class="legend-color today-legend"></span> | |
| <span class="legend-text">Σημερινή Ημερομηνία</span> | |
| </div> | |
| <div class="legend-item"> | |
| <span class="legend-color event-day-legend"></span> | |
| <span class="legend-text">Ημέρα Εκδήλωσης</span> | |
| </div> | |
| <div class="legend-item"> | |
| <span class="company-indicator">●</span> | |
| <span class="legend-text">(Εκδηλώσεις Εταιρειών)</span> | |
| </div> | |
| <div class="legend-item"> | |
| <span class="professor-indicator">●</span> | |
| <span class="legend-text">(Εκδηλώσεις Καθηγητών)</span> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| @if (isModalVisibleToShowEventsOnCalendarForEachClickedDay) | |
| { | |
| <div class="row mb-3"> | |
| <div class="col-md-12"> | |
| <div class="modal custom-modal"> <!-- Added custom class here --> | |
| <div class="modal-content"> | |
| <h3><strong>Λεπτομέρειες Εκδήλωσης/σεων</strong>: <span style="color: #00008B;">@selectedDate?.ToString("MMMM dd yyyy")</span></h3> | |
| <!-- Filter Section --> | |
| @if (selectedEvent == null) | |
| { | |
| <div class="form-group"> | |
| <label style="font-weight: bold; color: #4682b4;">Φιλτράρισμα Εκδηλώσεων</label> | |
| <div class="input-group custom-width"> | |
| <select class=".form-control-calendarEventModal" @bind="selectedEventFilter"> | |
| <option value="All">Όλες οι Εκδηλώσεις</option> | |
| <option value="Company">Εκδηλώσεις Εταιρειών</option> | |
| <option value="Professor">Εκδηλώσεις Καθηγητών</option> | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"></span> | |
| </div> | |
| </div> | |
| </div> | |
| <br/> | |
| @if (selectedEvent == null) | |
| { | |
| @if (filteredCompanyEvents.Count == 0 && filteredProfessorEvents.Count == 0) | |
| { | |
| <p> | |
| "Δεν βρέθηκε καμία Εκδήλωση για αυτήν τη μέρα" | |
| </p> | |
| <p> | |
| Η σημερινή ημερομηνία είναι: <strong>@DateTime.Today.ToString("dd MMMM , yyyy", new System.Globalization.CultureInfo("el-GR"))</strong> | |
| </p> | |
| } | |
| else | |
| { | |
| <ul class="list-group"> | |
| @if (selectedEventFilter == "All" || selectedEventFilter == "Company" || selectedEventFilter == "Professor") | |
| { | |
| <div class="table-responsive" style="max-height: 400px; overflow-y: auto;"> | |
| <table class="table table-responsive" style="width: auto; table-layout: fixed;"> | |
| <thead> | |
| <tr> | |
| <th class="text-center" style="width: auto;">Διοργανωτής</th> | |
| <th class="text-center" style="width: auto;">Ημερομηνία</th> | |
| <th class="text-center" style="width: auto;">Ώρα</th> | |
| <th class="text-center" style="width: auto;">Τίτλος</th> | |
| <th class="text-center" style="width: auto;">Λεπτομέρειες</th> | |
| @if (selectedEventFilter != "Company") | |
| { | |
| <th class="text-center" style="width: auto;">Ένδειξη Ενδιαφέροντος</th> | |
| } | |
| </tr> | |
| </thead> | |
| <tbody> | |
| @if (selectedEventFilter == "All" || selectedEventFilter == "Company") | |
| { | |
| @foreach (var companyEvent in filteredCompanyEvents) | |
| { | |
| <tr style="cursor:pointer; text-align: center;"> | |
| <td style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;">@companyEvent.Company.CompanyName</td> | |
| <td>@companyEvent.CompanyEventActiveDate.Date.ToString("dd MMMM", new System.Globalization.CultureInfo("el-GR"))</td> | |
| <td>@companyEvent.CompanyEventTime</td> | |
| <td style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;">@companyEvent.CompanyEventTitle</td> | |
| <td> | |
| <i class="fas fa-eye" @onclick="() => ShowEventDetails(companyEvent)" style="cursor: pointer; font-size: 20px;"></i> | |
| </td> | |
| @if (selectedEventFilter != "Company") | |
| { | |
| <td> - </td> | |
| } | |
| </tr> | |
| } | |
| } | |
| @if (selectedEventFilter == "All" || selectedEventFilter == "Professor") | |
| { | |
| @foreach (var professorEvent in filteredProfessorEvents) | |
| { | |
| bool hasAlreadyExpressedInterest = dbContext.InterestInProfessorEventsAsCompany | |
| .Any(i => i.RNGForProfessorEventInterestAsCompany == professorEvent.RNGForEventUploadedAsProfessor | |
| && i.CompanyEmailShowInterestForProfessorEvent == CurrentUserEmail); | |
| <tr style="cursor:pointer; text-align: center; background-color: @(hasAlreadyExpressedInterest ? "lightgreen" : "transparent");"> | |
| <td style="max-width: auto; overflow: hidden; text-overflow: ellipsis;"> | |
| @professorEvent.Professor?.ProfName @professorEvent.Professor?.ProfSurname | |
| </td> | |
| <td>@professorEvent.ProfessorEventActiveDate.Date.ToString("dd MMMM", new System.Globalization.CultureInfo("el-GR"))</td> | |
| <td>@professorEvent.ProfessorEventTime</td> | |
| <td style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;">@professorEvent.ProfessorEventTitle</td> | |
| <td> | |
| <i class="fas fa-eye" @onclick="() => ShowEventDetails(professorEvent)" style="cursor: pointer; font-size: 20px;"></i> | |
| </td> | |
| @if (selectedEventFilter != "Company") | |
| { | |
| <td> | |
| <div style="display: flex; align-items: center; justify-content: center; gap: 5px; flex-wrap: wrap;"> | |
| @if (!hasAlreadyExpressedInterest) | |
| { | |
| <span style="white-space: nowrap; font-size: 12px; font-weight: bold;">Αριθμός Συμμετοχόντων</span> | |
| <input type="number" | |
| value="@GetOrAddNumberOfPeople(professorEvent.RNGForEventUploadedAsProfessor)" | |
| @onchange="(e) => HandleNumberChangeForParticipantsWhenShowInterestAsACompanyForAProfessorEvent(e, professorEvent.RNGForEventUploadedAsProfessor)" | |
| min="1" | |
| class="form-control" | |
| style="width: auto; margin: 0; text-align: center;"/> | |
| } | |
| @if (hasAlreadyExpressedInterest) | |
| { | |
| <span style="color: black; font-weight: bold; white-space: nowrap;">Έχετε Εκδηλώσει Ενδιαφέρον</span> | |
| } | |
| else | |
| { | |
| <span style="white-space: nowrap; font-size: 12px; font-weight: bold;"> | |
| Δείξτε Ενδιαφέρον | |
| <span style="color: lightgray; font-weight: normal; font-style: italic;">(πατήστε το εικονίδιο)</span> | |
| </span> | |
| <i class="fas fa-heart" @onclick="() => ShowInterestInProfessorEventAsCompany(professorEvent)" | |
| style="cursor: pointer; font-size: 18px; color: goldenrod;"></i> | |
| } | |
| </div> | |
| </td> | |
| } | |
| </tr> | |
| } | |
| } | |
| </tbody> | |
| </table> | |
| </div> | |
| } | |
| </ul> | |
| } | |
| } | |
| <button class="btn btn-danger mt-3" @onclick="CloseModalForCompanyAndProfessorEventTitles">Κλείσιμο</button> | |
| } | |
| else | |
| { | |
| <!-- Display full details of the selected event --> | |
| @if (selectedEvent is CompanyEvent companyEventDetails) | |
| { | |
| <div class="modal fade show d-block" tabindex="-1" role="dialog" style="background-color: rgba(0, 0, 0, 0.5);"> | |
| <div class="modal-dialog modal-dialog-centered modal-lg" role="document"> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title" style="color: #4682B4;">@companyEventDetails.CompanyEventTitle</h5> | |
| <button type="button" class="close" @onclick="CloseEventDetails"> | |
| <span aria-hidden="true">×</span> | |
| </button> | |
| </div> | |
| <div class="modal-body"> | |
| @if (companyEventDetails.Company.CompanyLogo != null) | |
| { | |
| <div class="form-group text-center"> | |
| <img src="data:image/png;base64,@Convert.ToBase64String(companyEventDetails.Company.CompanyLogo)" | |
| class="rounded-circle img-fluid" | |
| style="width: 150px; height: 150px; object-fit: cover;" | |
| alt="Company Logo" /> | |
| </div> | |
| } | |
| <div class="list-group"> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Όνομα Εταιρίας</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-industry" style="color: #5F9EA0; margin-right: 8px;"></i> | |
| <span>@companyEventDetails.Company.CompanyName</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τίτλος Εκδήλωσης</label> | |
| <input type="text" class="form-control" value="@companyEventDetails.CompanyEventTitle" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Περιγραφή</label> | |
| <textarea class="form-control" rows="3" readonly>@companyEventDetails.CompanyEventDescription</textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Ημερομηνία</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="far fa-calendar-alt" style="color: #5F9EA0; margin-right: 8px;"></i> | |
| <span>@companyEventDetails.CompanyEventActiveDate.ToString("yyyy-MM-dd", new System.Globalization.CultureInfo("el-GR"))</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Ώρα Εκδήλωσης</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="far fa-clock" style="color: #5F9EA0; margin-right: 8px;"></i> | |
| <span>@companyEventDetails.CompanyEventTime.ToString(@"hh\:mm")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τύπος Εκδήλωσης</label> | |
| <input type="text" class="form-control" value="@companyEventDetails.CompanyEventType" readonly /> | |
| </div> | |
| @if (companyEventDetails.CompanyEventOtherOrganizerToBeVisible) | |
| { | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Άλλος Διοργανωτής</label> | |
| <input type="text" class="form-control" value="@companyEventDetails.CompanyEventOtherOrganizer" readonly /> | |
| </div> | |
| } | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Περιοχές Ενδιαφέροντος</label> | |
| <textarea class="form-control" rows="3" readonly>@companyEventDetails.CompanyEventAreasOfInterest</textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Κατάσταση Εκδήλωσης</label> | |
| <input type="text" class="form-control" value="@companyEventDetails.CompanyEventStatus" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Υπεύθυνος Εκδήλωσης</label> | |
| <input type="text" class="form-control" value="@companyEventDetails.CompanyEventResponsiblePerson" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Email Υπεύθυνου</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto; background-color: #fff;"> | |
| <i class="fas fa-envelope" style="color: #4682B4; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrEmpty(companyEventDetails.CompanyEventResponsiblePersonEmail)) | |
| { | |
| <a href="mailto:@companyEventDetails.CompanyEventResponsiblePersonEmail" | |
| style="color: #007bff; text-decoration: underline; word-break: break-all;"> | |
| @companyEventDetails.CompanyEventResponsiblePersonEmail | |
| </a> | |
| } | |
| else | |
| { | |
| <span style="color: #6c757d;">Δεν υπάρχει email</span> | |
| } | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τηλέφωνο Υπεύθυνου</label> | |
| <input type="text" class="form-control" value="@companyEventDetails.CompanyEventResponsiblePersonTelephone" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τμήμα Εταιρίας</label> | |
| <input type="text" class="form-control" value="@companyEventDetails.CompanyEventCompanyDepartment" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Διεύθυνση Email Εταιρίας</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto; background-color: #fff;"> | |
| <i class="fas fa-envelope" style="color: #4682B4; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrEmpty(companyEventDetails.CompanyEmailUsedToUploadEvent)) | |
| { | |
| <a href="mailto:@companyEventDetails.CompanyEmailUsedToUploadEvent" | |
| style="color: #007bff; text-decoration: underline; word-break: break-all;"> | |
| @companyEventDetails.CompanyEmailUsedToUploadEvent | |
| </a> | |
| } | |
| else | |
| { | |
| <span style="color: #6c757d;">Δεν υπάρχει email</span> | |
| } | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Ημερομηνία Ανάρτησης Εκδήλωσης</label> | |
| <input type="text" class="form-control" | |
| value="@companyEventDetails.CompanyEventUploadedDate.ToString("yyyy-MM-dd", new System.Globalization.CultureInfo("el-GR"))" | |
| readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Περιοχή Εκδήλωσης</label> | |
| <input type="text" class="form-control" value="@companyEventDetails.CompanyEventPerifereiaLocation" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Δήμος Εκδήλωσης</label> | |
| <input type="text" class="form-control" value="@companyEventDetails.CompanyEventDimosLocation" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τοποθεσία Εκδήλωσης</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto; background-color: #fff;"> | |
| <i class="fas fa-map-marker-alt" style="color: #dc3545; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrEmpty(companyEventDetails.CompanyEventPlaceLocation)) | |
| { | |
| <a href="https://www.google.com/maps/search/?api=1&[email protected](companyEventDetails.CompanyEventPlaceLocation)" | |
| target="_blank" | |
| style="color: #007bff; text-decoration: underline; word-break: break-word;"> | |
| @companyEventDetails.CompanyEventPlaceLocation | |
| </a> | |
| } | |
| else | |
| { | |
| <span style="color: #6c757d;">Δεν έχει οριστεί τοποθεσία Εκδήλωσης ακόμη..</span> | |
| } | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Ταχυδρομικός Κώδικας Εκδήλωσης</label> | |
| <input type="text" class="form-control" value="@companyEventDetails.CompanyEventPostalCodeLocation" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Μεταφορά Στον Χώρο Εκδήλωσης</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto; | |
| @(companyEventDetails.CompanyEventOfferingTransportToEventLocation.GetValueOrDefault() ? "color: #28a745;" : "color: #dc3545;")"> | |
| <i class="fas fa-car" style="margin-right: 8px;"></i> | |
| <span>@(companyEventDetails.CompanyEventOfferingTransportToEventLocation.GetValueOrDefault() ? "Ναι" : "Όχι")</span> | |
| </div> | |
| </div> | |
| @if (companyEventDetails.CompanyEventOfferingTransportToEventLocation ?? false) | |
| { | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Σημεία Εκκίνησης για Μεταφορά</label> | |
| @if (!string.IsNullOrWhiteSpace(companyEventDetails.CompanyEventStartingPointLocationToTransportPeopleToEvent1)) | |
| { | |
| <div class="form-group"> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-map-marker-alt" style="color: #dc3545; margin-right: 8px;"></i> | |
| <a href="https://www.google.com/maps/search/@Uri.EscapeDataString(companyEventDetails.CompanyEventStartingPointLocationToTransportPeopleToEvent1)" | |
| target="_blank" | |
| style="color: #007bff; text-decoration: underline; word-break: break-word;"> | |
| @companyEventDetails.CompanyEventStartingPointLocationToTransportPeopleToEvent1 | |
| </a> | |
| </div> | |
| </div> | |
| } | |
| @if (!string.IsNullOrWhiteSpace(companyEventDetails.CompanyEventStartingPointLocationToTransportPeopleToEvent2)) | |
| { | |
| <div class="form-group"> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-map-marker-alt" style="color: #dc3545; margin-right: 8px;"></i> | |
| <a href="https://www.google.com/maps/search/@Uri.EscapeDataString(companyEventDetails.CompanyEventStartingPointLocationToTransportPeopleToEvent2)" | |
| target="_blank" | |
| style="color: #007bff; text-decoration: underline; word-break: break-word;"> | |
| @companyEventDetails.CompanyEventStartingPointLocationToTransportPeopleToEvent2 | |
| </a> | |
| </div> | |
| </div> | |
| } | |
| @if (!string.IsNullOrWhiteSpace(companyEventDetails.CompanyEventStartingPointLocationToTransportPeopleToEvent3)) | |
| { | |
| <div class="form-group"> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-map-marker-alt" style="color: #dc3545; margin-right: 8px;"></i> | |
| <a href="https://www.google.com/maps/search/@Uri.EscapeDataString(companyEventDetails.CompanyEventStartingPointLocationToTransportPeopleToEvent3)" | |
| target="_blank" | |
| style="color: #007bff; text-decoration: underline; word-break: break-word;"> | |
| @companyEventDetails.CompanyEventStartingPointLocationToTransportPeopleToEvent3 | |
| </a> | |
| </div> | |
| </div> | |
| } | |
| </div> | |
| } | |
| <button class="btn btn-primary mt-3" @onclick="CloseEventDetails">Πίσω</button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| else if (selectedEvent is ProfessorEvent professorEventDetails) | |
| { | |
| <div class="modal fade show d-block" tabindex="-1" role="dialog" style="background-color: rgba(0, 0, 0, 0.5);"> | |
| <div class="modal-dialog modal-dialog-centered modal-lg" role="document"> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title" style="color: #4682B4;">@professorEventDetails.ProfessorEventTitle</h5> | |
| <button type="button" class="close" @onclick="CloseEventDetails"> | |
| <span aria-hidden="true">×</span> | |
| </button> | |
| </div> | |
| <div class="modal-body"> | |
| @if (professorEventDetails.Professor.ProfImage != null) | |
| { | |
| <div class="form-group text-center"> | |
| <img src="data:image/png;base64,@Convert.ToBase64String(professorEventDetails.Professor.ProfImage)" | |
| class="rounded-circle img-fluid" | |
| style="width: 150px; height: 150px; object-fit: cover;" | |
| alt="Professor Image" /> | |
| </div> | |
| } | |
| <div class="list-group"> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Ονοματεπώνυμο Διοργανωτή</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-user" style="color: #5F9EA0; margin-right: 8px;"></i> | |
| <span>@professorEventDetails.Professor.ProfName @professorEventDetails.Professor.ProfSurname</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τίτλος Εκδήλωσης</label> | |
| <input type="text" class="form-control" value="@professorEventDetails.ProfessorEventTitle" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Περιγραφή</label> | |
| <textarea class="form-control" rows="3" readonly>@professorEventDetails.ProfessorEventDescription</textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Ημερομηνία</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="far fa-calendar-alt" style="color: #5F9EA0; margin-right: 8px;"></i> | |
| <span>@professorEventDetails.ProfessorEventActiveDate.ToString("yyyy-MM-dd")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Ώρα Εκδήλωσης</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="far fa-clock" style="color: #5F9EA0; margin-right: 8px;"></i> | |
| <span>@professorEventDetails.ProfessorEventTimeOnly.ToString("HH:mm")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τύπος Εκδήλωσης</label> | |
| <input type="text" class="form-control" value="@professorEventDetails.ProfessorEventType" readonly /> | |
| </div> | |
| @if (professorEventDetails.ProfessorEventOtherOrganizerToBeVisible) | |
| { | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Άλλος Διοργανωτής</label> | |
| <input type="text" class="form-control" value="@professorEventDetails.ProfessorEventOtherOrganizer" readonly /> | |
| </div> | |
| } | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Περιοχές Ενδιαφέροντος</label> | |
| <textarea class="form-control" rows="3" readonly>@professorEventDetails.ProfessorEventAreasOfInterest</textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Κατάσταση Εκδήλωσης</label> | |
| <input type="text" class="form-control" value="@professorEventDetails.ProfessorEventStatus" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Ονοματεπώνυμο Υπεύθυνου</label> | |
| <input type="text" class="form-control" value="@professorEventDetails.ProfessorEventResponsiblePerson" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Email Υπεύθυνου</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto; background-color: #fff;"> | |
| <i class="fas fa-envelope" style="color: #4682B4; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrEmpty(professorEventDetails.ProfessorEventResponsiblePersonEmail)) | |
| { | |
| <a href="mailto:@professorEventDetails.ProfessorEventResponsiblePersonEmail" | |
| style="color: #007bff; text-decoration: underline; word-break: break-all;"> | |
| @professorEventDetails.ProfessorEventResponsiblePersonEmail | |
| </a> | |
| } | |
| else | |
| { | |
| <span style="color: #6c757d;">Δεν υπάρχει email</span> | |
| } | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τηλέφωνο Υπεύθυνου</label> | |
| <input type="text" class="form-control" value="@professorEventDetails.ProfessorEventResponsiblePersonTelephone" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Πανεπιστήμιο</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-university" style="color: #5F9EA0; margin-right: 8px;"></i> | |
| <span>@professorEventDetails.Professor.ProfUniversity</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τμήμα Πανεπιστημίου</label> | |
| <input type="text" class="form-control" value="@professorEventDetails.ProfessorEventUniversityDepartment" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Email Καθηγητή</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto; background-color: #fff;"> | |
| <i class="fas fa-envelope" style="color: #4682B4; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrEmpty(professorEventDetails.Professor.ProfEmail)) | |
| { | |
| <a href="mailto:@professorEventDetails.Professor.ProfEmail" | |
| style="color: #007bff; text-decoration: underline; word-break: break-all;"> | |
| @professorEventDetails.Professor.ProfEmail | |
| </a> | |
| } | |
| else | |
| { | |
| <span style="color: #6c757d;">Δεν υπάρχει email</span> | |
| } | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Περιφέρεια</label> | |
| <input type="text" class="form-control" value="@professorEventDetails.ProfessorEventPerifereiaLocation" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Δήμος</label> | |
| <input type="text" class="form-control" value="@professorEventDetails.ProfessorEventDimosLocation" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τοποθεσία Εκδήλωσης</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto; background-color: #fff;"> | |
| <i class="fas fa-map-marker-alt" style="color: #dc3545; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrEmpty(professorEventDetails.ProfessorEventPlaceLocation)) | |
| { | |
| <a href="https://www.google.com/maps/search/?api=1&[email protected](professorEventDetails.ProfessorEventPlaceLocation)" | |
| target="_blank" | |
| style="color: #007bff; text-decoration: underline; word-break: break-word;"> | |
| @professorEventDetails.ProfessorEventPlaceLocation | |
| </a> | |
| } | |
| else | |
| { | |
| <span style="color: #6c757d;">Δεν έχει οριστεί τοποθεσία Εκδήλωσης ακόμη..</span> | |
| } | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Ταχυδρομικός Κώδικας Τοποθεσίας</label> | |
| <input type="text" class="form-control" value="@professorEventDetails.ProfessorEventPostalCodeLocation" readonly /> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Μεταφορά Στον Χώρο Εκδήλωσης</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto; | |
| @(professorEventDetails.ProfessorEventOfferingTransportToEventLocation.GetValueOrDefault() ? "color: #28a745;" : "color: #dc3545;")"> | |
| <i class="fas fa-car" style="margin-right: 8px;"></i> | |
| <span>@(professorEventDetails.ProfessorEventOfferingTransportToEventLocation.GetValueOrDefault() ? "Ναι" : "Όχι")</span> | |
| </div> | |
| </div> | |
| @if (professorEventDetails.ProfessorEventOfferingTransportToEventLocation ?? false) | |
| { | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Σημεία Εκκίνησης για Μεταφορά</label> | |
| @if (!string.IsNullOrWhiteSpace(professorEventDetails.ProfessorEventStartingPointLocationToTransportPeopleToEvent1)) | |
| { | |
| <div class="form-group"> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-map-marker-alt" style="color: #dc3545; margin-right: 8px;"></i> | |
| <a href="https://www.google.com/maps/search/@Uri.EscapeDataString(professorEventDetails.ProfessorEventStartingPointLocationToTransportPeopleToEvent1)" | |
| target="_blank" | |
| style="color: #007bff; text-decoration: underline; word-break: break-word;"> | |
| @professorEventDetails.ProfessorEventStartingPointLocationToTransportPeopleToEvent1 | |
| </a> | |
| </div> | |
| </div> | |
| } | |
| @if (!string.IsNullOrWhiteSpace(professorEventDetails.ProfessorEventStartingPointLocationToTransportPeopleToEvent2)) | |
| { | |
| <div class="form-group"> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-map-marker-alt" style="color: #dc3545; margin-right: 8px;"></i> | |
| <a href="https://www.google.com/maps/search/@Uri.EscapeDataString(professorEventDetails.ProfessorEventStartingPointLocationToTransportPeopleToEvent2)" | |
| target="_blank" | |
| style="color: #007bff; text-decoration: underline; word-break: break-word;"> | |
| @professorEventDetails.ProfessorEventStartingPointLocationToTransportPeopleToEvent2 | |
| </a> | |
| </div> | |
| </div> | |
| } | |
| @if (!string.IsNullOrWhiteSpace(professorEventDetails.ProfessorEventStartingPointLocationToTransportPeopleToEvent3)) | |
| { | |
| <div class="form-group"> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-map-marker-alt" style="color: #dc3545; margin-right: 8px;"></i> | |
| <a href="https://www.google.com/maps/search/@Uri.EscapeDataString(professorEventDetails.ProfessorEventStartingPointLocationToTransportPeopleToEvent3)" | |
| target="_blank" | |
| style="color: #007bff; text-decoration: underline; word-break: break-word;"> | |
| @professorEventDetails.ProfessorEventStartingPointLocationToTransportPeopleToEvent3 | |
| </a> | |
| </div> | |
| </div> | |
| } | |
| </div> | |
| } | |
| <button class="btn btn-primary mt-3" @onclick="CloseEventDetails">Πίσω</button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| } | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| <!-- ΔΗΜΙΟΥΡΓΙΑ ΕΚΔΗΛΩΣΗΣ ΩΣ COMPANY USER--> | |
| <div class="mb-3 row-dark-gray"> | |
| <div class="d-flex justify-content-between align-items-center" @onclick="ToggleFormVisibilityForUploadCompanyEvent" style="cursor: pointer;"> | |
| <label class="form-label" style="color: #FFF8DC;">• Δημιουργία Εκδήλωσης •</label> | |
| <button class="btn btn-link" @onclick="ToggleFormVisibilityForUploadCompanyEvent" @onclick:stopPropagation="true"> | |
| @if (isUploadCompanyEventFormVisible) | |
| { | |
| <span>−</span> <!-- Minus sign --> | |
| } | |
| else | |
| { | |
| <span>+</span> <!-- Plus sign --> | |
| } | |
| </button> | |
| </div> | |
| </div> | |
| @if (isUploadCompanyEventFormVisible) | |
| { | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventType"> | |
| <strong>Τύπος Εκδήλωσης</strong> | |
| <span style="color: red;"> *</span> | |
| </label> | |
| <div class="input-group"> | |
| <select id="CompanyEventType" class="form-control @(showErrorMessageForUploadingCompanyEvent && string.IsNullOrWhiteSpace(companyEvent.CompanyEventType) ? "shake error" : "")" @bind="companyEvent.CompanyEventType"> | |
| <option value="">-- Επιλέξτε τύπο εκδήλωσης --</option> | |
| <option value="Έκθεση">Έκθεση</option> | |
| <option value="Hackathon">Hackathon</option> | |
| <option value="Career Day">Career Day</option> | |
| <option value="Seminar">Seminar</option> | |
| <option value="Επίσκεψη">Επίσκεψη</option> | |
| <option value="Άλλο">Άλλο</option> | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| @if (showErrorMessageForUploadingCompanyEvent && string.IsNullOrWhiteSpace(companyEvent.CompanyEventType)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται επιλογή Τύπου Θέσης.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventOtherOrganizerToBeVisible"><strong>Θέλετε να προσθέσετε άλλον διοργανωτή;</strong><span style="color: red;"> *</span></label> | |
| <div class="form-check"> | |
| <input type="radio" id="true" name="CompanyEventOtherOrganizerToBeVisible" class="form-check-input @(showErrorMessageForUploadingCompanyEvent && companyEvent.CompanyEventOtherOrganizerToBeVisible == null ? "error" : "")" | |
| value="true" checked="@(companyEvent.CompanyEventOtherOrganizerToBeVisible == true)" | |
| @onchange="() => { companyEvent.CompanyEventOtherOrganizerToBeVisible = true; UpdateOrganizerVisibility(true); }" /> | |
| <label class="form-check-label" for="true">Ναι</label> | |
| </div> | |
| <div class="form-check"> | |
| <input type="radio" id="false" name="CompanyEventOtherOrganizerToBeVisible" class="form-check-input @(showErrorMessageForUploadingCompanyEvent && companyEvent.CompanyEventOtherOrganizerToBeVisible == null ? "error" : "")" | |
| value="false" checked="@(companyEvent.CompanyEventOtherOrganizerToBeVisible == false)" | |
| @onchange="() => { companyEvent.CompanyEventOtherOrganizerToBeVisible = false; UpdateOrganizerVisibility(false); }" /> | |
| <label class="form-check-label" for="false">Όχι</label> | |
| </div> | |
| </div> | |
| @if (showErrorMessageForUploadingCompanyEvent && companyEvent.CompanyEventOtherOrganizerToBeVisible == null) | |
| { | |
| <div class="text-danger mt-1">Επιλέξτε Ναι ή Όχι</div> | |
| } | |
| </div> | |
| @if (companyEvent.CompanyEventOtherOrganizerToBeVisible) | |
| { | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventOtherOrganizer"><strong>Διοργανωτής</strong><span style="color: red;"> *</span></label> | |
| <div class="input-group"> | |
| <input type="text" class="form-control @(showErrorMessageForUploadingCompanyEvent && string.IsNullOrWhiteSpace(companyEvent.CompanyEventOtherOrganizer) ? "shake error" : "")" | |
| @bind="companyEvent.CompanyEventOtherOrganizer" placeholder="Πληκτρολογείστε τον Διοργανωτή" /> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-user"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| @if (showErrorMessageForUploadingCompanyEvent && string.IsNullOrWhiteSpace(companyEvent.CompanyEventOtherOrganizer)) | |
| { | |
| <div class="text-danger mt-1">Εισάγετε τον επιπλέον Διοργανωτή της Εκδήλωσης</div> | |
| } | |
| </div> | |
| } | |
| <!-- Areas of Interest Toggle --> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <div style="display: flex; align-items: center; gap: 12px; margin-bottom: 12px; flex-wrap: wrap;"> | |
| <label style="margin: 0; display: flex; align-items: center; gap: 4px;"> | |
| <strong>Περιοχές Ενδιαφέροντος</strong> | |
| <span style="color: red;">*</span> | |
| </label> | |
| <button type="button" | |
| @onclick="ToggleCheckboxesForCompanyEvent" | |
| class="toggle-all-areas-btn @(showErrorMessageForUploadingCompanyEvent && !HasAnySelectionForCompanyEvent() ? "shake error" : "")" | |
| style="border: 1px solid #1565c0; background: white; border-radius: 6px; padding: 4px 10px; cursor: pointer; display: inline-flex; align-items: center; gap: 6px; color: #1565c0; font-size: 0.85em; transition: all 0.2s;"> | |
| <span>👆</span> | |
| <span>Προβολή περιοχών</span> | |
| </button> | |
| </div> | |
| @if (showCheckboxesForCompanyEvent) | |
| { | |
| <div id="toggleCheckboxes" class="checkbox-container"> | |
| @if (Areas == null || !Areas.Any()) | |
| { | |
| <p>Φορτώνει...</p> | |
| } | |
| else | |
| { | |
| @foreach (var area in Areas) | |
| { | |
| <div class="area-container" style="margin-bottom: 8px; border: 2px solid #1565c0; border-radius: 6px; padding: 8px; background-color: #f8f9fa;"> | |
| <div class="form-check area-header" style="display: flex; align-items: center; gap: 8px;"> | |
| <input type="checkbox" | |
| id="[email protected]" | |
| class="form-check-input" | |
| @onchange="(e) => OnAreaCheckedChangedForCompanyEvent(e, area)" | |
| checked="@IsAreaSelectedForCompanyEvent(area)" /> | |
| <label class="form-check-label area-label @(showErrorMessageForUploadingCompanyEvent && !HasAnySelectionForCompanyEvent() ? "shake error" : "")" | |
| for="[email protected]" | |
| style="cursor: pointer; font-weight: bold; flex-grow: 1; color: #1565c0;"> | |
| @area.AreaName | |
| </label> | |
| <button type="button" | |
| @onclick="@(() => ToggleSubFieldsForCompanyEvent(area))" | |
| @onclick:stopPropagation="true" | |
| class="expand-btn" | |
| style="border: 1px solid #1565c0; background: white; border-radius: 4px; padding: 4px 8px; cursor: pointer; display: flex; align-items: center; gap: 4px; font-size: 0.8em; color: #1565c0; transition: all 0.2s;"> | |
| <span>Υποτομείς</span> | |
| <span class="expand-icon" style="font-size: 10px; transition: transform 0.2s; transform: @(ExpandedAreasForCompanyEvent.Contains(area.Id) ? "rotate(90deg)" : "rotate(0deg)")">▶</span> | |
| </button> | |
| </div> | |
| @if (ExpandedAreasForCompanyEvent.Contains(area.Id)) | |
| { | |
| <div class="subfields-container" style="margin-top: 12px; margin-left: 28px; padding: 12px; background: white; border: 1px solid #e0e0e0; border-radius: 4px;"> | |
| <div style="font-size: 0.85em; color: #666; margin-bottom: 8px; font-weight: 500;"> | |
| Επιλέξτε υποτομείς: | |
| </div> | |
| @if (!string.IsNullOrEmpty(area.AreaSubFields)) | |
| { | |
| var subFields = area.AreaSubFields.Split(',').Select(s => s.Trim()).ToList(); | |
| @foreach (var subField in subFields) | |
| { | |
| <div class="form-check subfield-checkbox" style="margin-bottom: 6px;"> | |
| <input type="checkbox" | |
| id="subfield_@(area.Id)_@(subField)" | |
| class="form-check-input" | |
| @onchange="(e) => OnSubFieldCheckedChangedForCompanyEvent(e, area, subField)" | |
| checked="@IsSubFieldSelectedForCompanyEvent(area, subField)" /> | |
| <label class="form-check-label" for="subfield_@(area.Id)_@(subField)" style="font-weight: normal; font-size: 0.9em;"> | |
| @subField | |
| </label> | |
| </div> | |
| } | |
| } | |
| </div> | |
| } | |
| </div> | |
| } | |
| } | |
| </div> | |
| } | |
| </div> | |
| @if (showErrorMessageForUploadingCompanyEvent && !HasAnySelectionForCompanyEvent()) | |
| { | |
| <div class="text-danger mt-1">Πρέπει να επιλέξετε τουλάχιστον 1 Περιοχή Ενδιαφέροντος ή Υποτομέα.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventTitle"><strong>Τίτλος Εκδήλωσης</strong><span style="color: red;"> *</span></label> | |
| <input type="text" id="CompanyEventTitle" class="form-control @(showErrorMessageForUploadingCompanyEvent && string.IsNullOrWhiteSpace(companyEvent.CompanyEventTitle) ? "shake error" : "")" @bind="companyEvent.CompanyEventTitle" @oninput="CheckCharacterLimitInEventTitleField" maxlength="120" placeholder="Πληκτρολογείστε τον τίτλο της εκδήλωσης" /> | |
| <small class="character-limit light-cadetblue-text">@remainingCharactersInEventTitleField/120</small> | |
| </div> | |
| @if (showErrorMessageForUploadingCompanyEvent && string.IsNullOrWhiteSpace(companyEvent.CompanyEventTitle)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται ο Τίτλος της Εκδήλωσης</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventDescription"><strong>Περιγραφή Εκδήλωσης</strong> <span style="color: red;"> *</span></label> | |
| <textarea id="CompanyEventDescription" class="form-control @(showErrorMessageForUploadingCompanyEvent && string.IsNullOrWhiteSpace(companyEvent.CompanyEventDescription) ? "shake error" : "")" @bind="companyEvent.CompanyEventDescription" @oninput="CheckCharacterLimitInCompanyEventDescription" maxlength="1000" placeholder="Πληκτρολογείστε την Περιγραφή της Εκδήλωσής σας"></textarea> | |
| <small class="character-limit light-cadetblue-text">@remainingCharactersInCompanyEventDescription/1000</small> | |
| </div> | |
| @if (showErrorMessageForUploadingCompanyEvent && string.IsNullOrWhiteSpace(companyEvent.CompanyEventDescription)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται η Περιγραφή της Εκδήλωσης</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventResponsiblePerson">Υπεύθυνος Εκδήλωσης (Ονοματεπώνυμο)<span style="font-style: italic; color: gray;"> (Προαιρετικό)</span></label> | |
| <input type="text" id="CompanyEventResponsiblePerson" class="form-control" @bind="companyEvent.CompanyEventResponsiblePerson" /> | |
| </div> | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventResponsiblePersonEmail"> | |
| Email Υπεύθυνου | |
| <span style="font-style: italic; color: gray;"> (Προαιρετικό)</span> | |
| </label> | |
| <input type="email" id="CompanyEventResponsiblePersonEmail" class="form-control" | |
| @bind="companyEvent.CompanyEventResponsiblePersonEmail" | |
| placeholder="[email protected]" /> | |
| </div> | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventResponsiblePersonTelephone"> | |
| Τηλέφωνο Υπεύθυνου | |
| <span style="font-style: italic; color: gray;"> (Προαιρετικό)</span> | |
| </label> | |
| <div class="input-group"> | |
| <div class="input-group-prepend"> | |
| <span class="input-group-textfortelephone">+30</span> | |
| </div> | |
| <input type="tel" id="CompanyEventResponsiblePersonTelephone" | |
| class="form-control @(showErrorMessageForUploadingCompanyEvent && !IsValidPhoneNumber(companyEvent.CompanyEventResponsiblePersonTelephone) ? "shake error" : "")" | |
| @bind="companyEvent.CompanyEventResponsiblePersonTelephone" | |
| @oninput="OnCompanyCreateEventPhoneNumberInput" | |
| placeholder="Τηλέφωνο Υπευθύνου" | |
| maxlength="10" /> | |
| </div> | |
| @if (showErrorMessageForUploadingCompanyEvent && !IsValidPhoneNumber(companyEvent.CompanyEventResponsiblePersonTelephone) && !string.IsNullOrWhiteSpace(companyEvent.CompanyEventResponsiblePersonTelephone)) | |
| { | |
| <small style="color: red;">Παρακαλώ εισάγετε έγκυρο αριθμό τηλεφώνου...</small> | |
| } | |
| </div> | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventCompanyDepartment">Τμήμα Εταιρείας<span style="font-style: italic; color: gray;"> (Προαιρετικό)</span></label> | |
| <input type="text" id="CompanyEventCompanyDepartment" class="form-control" @bind="companyEvent.CompanyEventCompanyDepartment" /> | |
| </div> | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventDate"> | |
| <strong>Ημερομηνία Εκδήλωσης</strong> | |
| <span style="color: red;">*</span> | |
| </label> | |
| <input type="date" id="CompanyEventDate" | |
| class="form-control @(showErrorMessageForUploadingCompanyEvent && companyEvent.CompanyEventActiveDate.Date <= DateTime.Today ? "shake error" : "")" | |
| value="@companyEvent.CompanyEventActiveDate.ToString("yyyy-MM-dd")" | |
| @onchange="HandleDateChange" /> | |
| </div> | |
| @if (showErrorMessageForUploadingCompanyEvent && companyEvent.CompanyEventActiveDate.Date <= DateTime.Today) | |
| { | |
| <div class="text-danger mt-1">Η ημερομηνία πρέπει να είναι μεταγενέστερη της σημερινής ημερομηνίας.</div> | |
| } | |
| @if (hasExistingEventsOnSelectedDate) | |
| { | |
| <div class="text-info mt-1"> | |
| <i class="fas fa-info-circle"></i> Ενημέρωση: "Υπάρχουν ήδη <strong>@existingEventsCount</strong> εκδηλώσεις για αυτή την ημερομηνία." | |
| </div> | |
| } | |
| </div> | |
| <!-- Region Dropdown --> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventPerifereiaLocation"> | |
| <strong>Περιφέρεια</strong> | |
| <span style="color: red;">*</span> | |
| </label> | |
| <div class="input-group"> | |
| <select id="CompanyEventPerifereiaLocation" class="form-control @(showErrorMessageForUploadingCompanyEvent && string.IsNullOrWhiteSpace(companyEvent.CompanyEventPerifereiaLocation) ? "shake error" : "")" @bind="companyEvent.CompanyEventPerifereiaLocation"> | |
| <option value="">-- Επιλέξτε Περιφέρεια --</option> | |
| @foreach (var region in Regions) | |
| { | |
| <option value="@region">@region</option> | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| @if (showErrorMessageForUploadingCompanyEvent && string.IsNullOrWhiteSpace(companyEvent.CompanyEventPerifereiaLocation)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται η Περιφέρεια στην οποία θα πραγματοποιηθεί η Εκδήλωση</div> | |
| } | |
| </div> | |
| <!-- Town Dropdown --> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventDimosLocation"> | |
| <strong>Δήμος</strong> | |
| <span style="color: red;">*</span> | |
| </label> | |
| <div class="input-group"> | |
| <select id="CompanyEventDimosLocation" class="form-control @(showErrorMessageForUploadingCompanyEvent && string.IsNullOrWhiteSpace(companyEvent.CompanyEventDimosLocation) ? "shake error" : "")" @bind="companyEvent.CompanyEventDimosLocation"> | |
| <option value="">-- Επιλέξτε Δήμο --</option> | |
| @foreach (var town in GetTownsForRegion(companyEvent.CompanyEventPerifereiaLocation)) | |
| { | |
| <option value="@town">@town</option> | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| @if (showErrorMessageForUploadingCompanyEvent && string.IsNullOrWhiteSpace(companyEvent.CompanyEventDimosLocation)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται o Δήμος στον οποίο θα πραγματοποιηθεί η Εκδήλωση</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventPlaceLocation"><strong>Τοποθεσία Εκδήλωσης</strong><span style="color: red;"> *</span></label> | |
| <input type="text" id="autocomplete" class="form-control @(showErrorMessageForUploadingCompanyEvent && string.IsNullOrWhiteSpace(companyEvent.CompanyEventPlaceLocation) ? "shake error" : "")" @bind="companyEvent.CompanyEventPlaceLocation" placeholder="Αναζήτηση χώρου εκδήλωσης " /> | |
| </div> | |
| @if (showErrorMessageForUploadingCompanyEvent && string.IsNullOrWhiteSpace(companyEvent.CompanyEventPlaceLocation)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται Τοποθεσία/Διεύθυνση του χώρου Εκδήλωσης</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventTime"> | |
| <strong>Ώρα Εκδήλωσης</strong> | |
| <span style="color: red;">*</span> | |
| </label> | |
| <input type="time" | |
| id="CompanyEventTime" | |
| class="form-control @(showErrorMessageForUploadingCompanyEvent && (companyEvent.CompanyEventTimeOnly == TimeOnly.MinValue || IsTimeInRestrictedRangeWhenUploadEventAsCompany(companyEvent.CompanyEventTimeOnly)) ? "shake error" : "")" | |
| @bind="companyEvent.CompanyEventTimeOnly" | |
| min="06:00" | |
| max="22:00" /> | |
| </div> | |
| @if (showErrorMessageForUploadingCompanyEvent && companyEvent.CompanyEventTimeOnly == TimeOnly.MinValue) | |
| { | |
| <div class="text-danger mt-1">Η ώρα εκδήλωσης είναι υποχρεωτική.</div> | |
| } | |
| @if (showErrorMessageForUploadingCompanyEvent && IsTimeInRestrictedRangeWhenUploadEventAsCompany(companyEvent.CompanyEventTimeOnly)) | |
| { | |
| <div class="text-danger mt-1">Η ώρα πρέπει να είναι μεταξύ 06:00 και 22:00.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventPostalCodeLocation"><strong>Ταχυδρομικός Κώδικας</strong><span style="color: red;"> *</span></label> | |
| <input type="text" id="CompanyEventPostalCodeLocation" class="form-control @(showErrorMessageForUploadingCompanyEvent && string.IsNullOrWhiteSpace(companyEvent.CompanyEventPostalCodeLocation) ? "shake error" : "")" @bind="companyEvent.CompanyEventPostalCodeLocation" placeholder="Πληκτρολογείστε τον ταχυδρομικό κώδικα" /> | |
| </div> | |
| @if (showErrorMessageForUploadingCompanyEvent && string.IsNullOrWhiteSpace(companyEvent.CompanyEventPostalCodeLocation)) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται Ταχυδρομικός Κώδικας.</div> | |
| } | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventOfferingTransportToEventLocation"> | |
| <strong>Παροχή Μεταφοράς προς/από Χώρο Εκδήλωσης;</strong> | |
| <span style="color: red;"> *</span> | |
| </label> | |
| <select id="CompanyEventOfferingTransportToEventLocation" | |
| class="form-control @(showErrorMessageForUploadingCompanyEvent && companyEvent.CompanyEventOfferingTransportToEventLocation == null ? "shake error" : "")" | |
| @onchange="OnTransportOptionChange"> | |
| <option value="">-- Επιλέξτε --</option> | |
| <option value="true">Ναι</option> | |
| <option value="false">Όχι</option> | |
| </select> | |
| </div> | |
| @if (showErrorMessageForUploadingCompanyEvent && companyEvent.CompanyEventOfferingTransportToEventLocation == null) | |
| { | |
| <div class="text-danger mt-1">Απαιτείται Επιλογή Παροχής Μεταφοράς προς/από τον χώρο της Εκδήλωσης.</div> | |
| } | |
| </div> | |
| @if (companyEvent.CompanyEventOfferingTransportToEventLocation == true) | |
| { | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventStartingPointLocationToTransportPeopleToEvent1"> | |
| <strong>Σημείο Εκκίνησης 1 για μεταφορά προς Εκδήλωση</strong> | |
| <span style="color: red;"> *</span> | |
| </label> | |
| <input type="text" id="autocomplete2" | |
| class="form-control @(showErrorMessageForUploadingCompanyEvent && !HasAtLeastOneStartingPointWhenUploadEventAsCompany() ? "shake error" : "")" | |
| @bind="companyEvent.CompanyEventStartingPointLocationToTransportPeopleToEvent1" | |
| placeholder="Αναζήτηση 1ου σημείου εκκίνησης" /> | |
| </div> | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventStartingPointLocationToTransportPeopleToEvent2"> | |
| <strong>Σημείο Εκκίνησης 2 για μεταφορά προς Εκδήλωση</strong> | |
| </label> | |
| <input type="text" id="autocomplete3" | |
| class="form-control" | |
| @bind="companyEvent.CompanyEventStartingPointLocationToTransportPeopleToEvent2" | |
| placeholder="Αναζήτηση 2ου σημείου εκκίνησης (προαιρετικό)" /> | |
| </div> | |
| </div> | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventStartingPointLocationToTransportPeopleToEvent3"> | |
| <strong>Σημείο Εκκίνησης 3 για μεταφορά προς Εκδήλωση</strong> | |
| </label> | |
| <input type="text" id="autocomplete4" | |
| class="form-control" | |
| @bind="companyEvent.CompanyEventStartingPointLocationToTransportPeopleToEvent3" | |
| placeholder="Αναζήτηση 3ου σημείου εκκίνησης (προαιρετικό)" /> | |
| </div> | |
| </div> | |
| @if (showErrorMessageForUploadingCompanyEvent && !HasAtLeastOneStartingPointWhenUploadEventAsCompany()) | |
| { | |
| <div class="text-danger mt-1">Πρέπει να ορίσετε τουλάχιστον 1 σημείο εκκίνησης.</div> | |
| } | |
| } | |
| <div class="row mb-3"> | |
| <div class="col-md-4"> | |
| <label for="CompanyEventAttachmentFile">Συννημένο Αρχείο Εκδήλωσης<span style="font-style: italic; color: gray;"> (Προαιρετικό)</span></label> | |
| <InputFile id="CompanyEventAttachmentFile" class="form-control" OnChange="UploadCompanyEventAttachmentFile" /> | |
| </div> | |
| </div> | |
| <!-- Buttons to save the event --> | |
| <div class="row mb-3"> | |
| <div class="col-md-12"> | |
| <button class="modern-button" style="background-color: #2d3748; color: white; display: inline-flex; align-items: center;" @onclick="HandleTemporarySaveCompanyEvent"> | |
| <i class="fa-regular fa-floppy-disk" style="margin-right: 8px;"></i>Προσωρινή Αποθήκευση Εκδήλωσης | |
| </button> | |
| <button class="modern-button" style="background-color: #2d3748; color: white; display: inline-flex; align-items: center;" @onclick="HandlePublishSaveCompanyEvent"> | |
| <i class="fa-solid fa-floppy-disk" style="margin-right: 8px;"></i>Δημοσίευση Εκδήλωσης | |
| </button> | |
| </div> | |
| </div> | |
| <!-- Loading Modal for Company Event --> | |
| @if (showLoadingModalForEvent) | |
| { | |
| <div class="loading-modal"> | |
| <div class="loading-modal-content"> | |
| <div class="loading-spinner"></div> | |
| <p>Αποθήκευση Εκδήλωσης...</p> | |
| <div class="progress-bar"> | |
| <div class="progress-bar-fill" style="width: @loadingProgress%"></div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| @if (!isFormValidToSaveEventAsCompany) | |
| { | |
| <div class="alert alert-danger" role="alert"> | |
| Συμπληρώστε Όλα Τα Υποχρεωτικά Πεδία και Προσπαθήστε Ξανά | |
| </div> | |
| } | |
| @if (!string.IsNullOrEmpty(saveEventAsCompanyMessage)) | |
| { | |
| <div class="alert @(isSaveAnnouncementAsCompanySuccessful ? "alert-success" : "alert-danger")" role="alert"> | |
| @saveEventAsCompanyMessage | |
| </div> | |
| } | |
| } | |
| <!-- VIEW UPLOADED EVENTS AS COMPANY --> | |
| <div class="mb-3 row-dark-gray mt-4"> | |
| <div class="d-flex justify-content-between align-items-center" @onclick="ToggleUploadedCompanyEventsVisibility" style="cursor: pointer;"> | |
| <label class="form-label" style="color: #FFF8DC;"> | |
| @if (isLoadingUploadedEvents) | |
| { | |
| <span> | |
| <i class="fas fa-spinner fa-spin me-2"></i> | |
| Φόρτωση Εκδηλώσεων... | |
| </span> | |
| } | |
| else | |
| { | |
| <span>• Οι Εκδηλώσεις μου •</span> | |
| } | |
| </label> | |
| <button class="btn btn-link" @onclick="ToggleUploadedCompanyEventsVisibility" @onclick:stopPropagation="true"> | |
| @if (isUploadedEventsVisible && !isLoadingUploadedEvents) | |
| { | |
| <span>−</span> <!-- Minus sign --> | |
| } | |
| else if (!isLoadingUploadedEvents) | |
| { | |
| <span>+</span> <!-- Plus sign --> | |
| } | |
| </button> | |
| </div> | |
| </div> | |
| @if (isUploadedEventsVisible && !isLoadingUploadedEvents) | |
| { | |
| <div class="col-md-2"> | |
| <label for="statusFilterForAnnouncements" style="color: #2d3748; font-size: 15px;"><strong>Φίλτρο Εμφάνισης</strong></label> | |
| <div class="input-group"> | |
| <select id="statusFilterForAnnouncements" class="form-control form-control-sm" | |
| @onchange="HandleStatusFilterChangeForCompanyEvents"> | |
| <option value="Όλα">Όλες</option> | |
| <option value="Δημοσιευμένη">Δημοσιευμένες</option> | |
| <option value="Μη Δημοσιευμένη">Μη Δημοσιευμένες</option> | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-md-2"> | |
| <label style="color: #2d3748; font-size: 15px; display: block;"><strong>Αποτελέσματα ανά Σελίδα</strong></label> | |
| <div class="input-group" style="max-width: 65px;"> | |
| <select class="form-control form-control-sm" @onchange="OnPageSizeChange_SeeMyUploadedEventsAsCompany"> | |
| @foreach (var option in pageSizeOptions_SeeMyUploadedEventsAsCompany) | |
| { | |
| <option value="@option" selected="@(CompanyEventsPerPage == option)">@option</option> | |
| } | |
| </select> | |
| <div class="input-group-append"> | |
| <span class="input-group-text"> | |
| <i class="fas fa-chevron-down"></i> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <br/> | |
| <div class="col-md-2"> | |
| @if (selectedStatusFilterForEventsAsCompany == "Όλα") | |
| { | |
| <span><strong>Σύνολο: </strong>@totalCountEventsAsCompany</span> | |
| } | |
| else if (selectedStatusFilterForEventsAsCompany == "Δημοσιευμένη") | |
| { | |
| <span><strong>Σύνολο: </strong>@publishedCountEventsAsCompany</span> | |
| } | |
| else if (selectedStatusFilterForEventsAsCompany == "Μη Δημοσιευμένη") | |
| { | |
| <span><strong>Σύνολο: </strong>@unpublishedCountEventsAsCompany</span> | |
| } | |
| </div> | |
| <div style="max-width: auto; margin-left: 0;"> | |
| <div class="table-responsive"> | |
| <table class="table table-striped"> | |
| <thead> | |
| <tr style="border: 2px solid black; background-color: lightgray;"> | |
| <th style="border: 2px solid black;"><i class="fa-solid fa-key fa-sm" style="color: #0d6efd;"></i> Κωδικός Εκδήλωσης</th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-font fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Τίτλος | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-file-lines fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Περιγραφή | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-calendar-days fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ημερομηνία Δημοσίευσης | |
| </th> | |
| <th style="border: 2px solid black;"> | |
| <i class="fa-solid fa-arrows-up-down fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Κατάσταση | |
| </th> | |
| <th style="width: 300px; border: 2px solid black;"> | |
| <i class="fa-solid fa-hand fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ενέργειες | |
| </th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| @if (FilteredCompanyEvents != null && FilteredCompanyEvents.Any()) | |
| { | |
| @foreach (var companyevent in GetPaginatedCompanyEvents()) | |
| { | |
| <tr style="background-color: @(companyevent.CompanyEventStatus == "Δημοσιευμένη" ? "lightblue" : "lightcoral");"> | |
| <td style="color: #2d3748;"> | |
| @companyevent.RNGForEventUploadedAsCompany_HashedAsUniqueID | |
| </td> | |
| <td>@companyevent.CompanyEventTitle</td> | |
| <td style="width: 30%;"> | |
| @if (companyevent.CompanyEventDescription.Length > 50) | |
| { | |
| @companyevent.CompanyEventDescription.Substring(0, 50) | |
| } | |
| else | |
| { | |
| @companyevent.CompanyEventDescription | |
| } | |
| </td> | |
| <td>@companyevent.CompanyEventUploadedDate.ToString("dd/MM/yyyy")</td> | |
| <td>@companyevent.CompanyEventStatus</td> | |
| <td> | |
| <div class="d-flex gap-1"> | |
| <!-- Trash button --> | |
| <button class="btn btn-action btn-delete" @onclick="() => DeleteCompanyEvent(companyevent.Id)" title="Διαγραφή Εκδήλωσης"> | |
| <i class="fas fa-trash icon-button"></i> | |
| </button> | |
| <!-- Loading Modal for Delete Company Event --> | |
| @if (showLoadingModalForDeleteCompanyEvent) | |
| { | |
| <div class="loading-modal"> | |
| <div class="loading-modal-content"> | |
| <div class="loading-spinner"></div> | |
| <p>Διαγραφή Εκδήλωσης...</p> | |
| <div class="progress-bar"> | |
| <div class="progress-bar-fill" style="width: @loadingProgress%"></div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| <!-- Arrow down/up buttons --> | |
| @if (companyevent.CompanyEventStatus == "Δημοσιευμένη") | |
| { | |
| <button class="btn btn-action btn-unpublish" @onclick='async () => await ChangeCompanyEventStatus(companyevent.Id, "Μη Δημοσιευμένη")' title="Αποδημοσίευση Εκδήλωσης"> | |
| <i class="fas fa-arrow-down icon-button"></i> | |
| </button> | |
| } | |
| else if (companyevent.CompanyEventStatus == "Μη Δημοσιευμένη") | |
| { | |
| <button class="btn btn-action btn-publish" @onclick='async () => await ChangeCompanyEventStatus(companyevent.Id, "Δημοσιευμένη")' title="Δημοσίευση Εκδήλωσης"> | |
| <i class="fas fa-arrow-up icon-button"></i> | |
| </button> | |
| <!-- Pencil icon button to edit the event --> | |
| <button class="btn btn-action btn-edit" @onclick="() => OpenEditModalForCompanyEvent(companyevent)" title="Επεξεργασία Εκδήλωσης"> | |
| <i class="fas fa-pencil-alt icon-button"></i> | |
| </button> | |
| } | |
| <!-- User icon buttons --> | |
| <button class="btn btn-action btn-students" @onclick="() => ShowInterestedStudentsInCompanyEvent(companyevent.RNGForEventUploadedAsCompany)" title="Ενδιαφερόμενοι Φοιτητές" disabled="@isLoadingInterestedStudents"> | |
| @if (isLoadingInterestedStudents && loadingEventRNG == companyevent.RNGForEventUploadedAsCompany) | |
| { | |
| <i class="fas fa-spinner fa-spin"></i> | |
| } | |
| else | |
| { | |
| <i class="fa-solid fa-graduation-cap icon-button"></i> | |
| } | |
| </button> | |
| <button class="btn btn-action btn-professors" @onclick="async () => await ShowInterestedProfessorsInCompanyEvent(companyevent.RNGForEventUploadedAsCompany)" title="Ενδιαφερόμενοι Καθηγητές" disabled="@isLoadingInterestedProfessors"> | |
| @if (isLoadingInterestedProfessors && loadingEventRNGForProfessors == companyevent.RNGForEventUploadedAsCompany) | |
| { | |
| <i class="fas fa-spinner fa-spin"></i> | |
| } | |
| else | |
| { | |
| <i class="fa-solid fa-user-tie icon-button"></i> | |
| } | |
| </button> | |
| </div> | |
| </td> | |
| </tr> | |
| @if (selectedEventIdForStudents == companyevent.RNGForEventUploadedAsCompany) | |
| { | |
| @if (InterestedStudents.Any()) | |
| { | |
| <br/> | |
| <tr> | |
| <td colspan="9" style="padding: 0;"> | |
| <div style="display: flex; justify-content: space-between; align-items: center; height: 24px; line-height: 24px; width: 100%;"> | |
| <i class="fa-solid fa-graduation-cap" style="font-size: 18px; color: #0d6efd;"></i> | |
| <label class="form-label" style="color: #0d6efd; font-weight: bold; font-size: 18px; margin: 0;">Λεπτομέρειες Ενδιαφερόμενων Φοιτητών</label> | |
| <i class="fa-solid fa-graduation-cap" style="font-size: 18px; color: #0d6efd;"></i> | |
| </div> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td colspan="6"> | |
| <div class="table-responsive mt-2" style="background-color: white; padding: 10px; border-radius: 5px;"> | |
| <!-- Modern Download Button --> | |
| <button class="modern-button" @onclick="DownloadStudentListForInterestInCompanyEventAsCompany"> | |
| <i class="fas fa-download"></i> Λήψη Λίστας Ενδιαφερόμενων Φοιτητών | |
| </button> | |
| <table class="table table-striped"> | |
| <thead> | |
| <tr style="border: 1px solid darkblue;"> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-user fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ονοματεπώνυμο | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-phone fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Τηλέφωνο | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-envelope fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-bus fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Χρειάζεται Μεταφορά Προς/Από Εκδήλωση | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-map-marker-alt fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Σημείο Μεταφοράς | |
| </th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| @if (studentDataCache == null) | |
| { | |
| <tr> | |
| <td colspan="5" class="text-center"> | |
| <div class="spinner-border text-primary" role="status"> | |
| <span class="sr-only">Φόρτωση...</span> | |
| </div> | |
| <p>Φόρτωση δεδομένων φοιτητών...</p> | |
| </td> | |
| </tr> | |
| } | |
| else if (InterestedStudents != null && InterestedStudents.Any()) | |
| { | |
| @foreach (var application in InterestedStudents) | |
| { | |
| var student = studentDataCache.TryGetValue(application.StudentEmailShowInterestForEvent, out var s) ? s : null; | |
| <tr> | |
| <td> | |
| <a href="#" @onclick="() => ShowStudentDetailsAtCompanyEventInterest(application)"> | |
| @(student != null ? $"{student.Name} {student.Surname}" : "Δε βρέθηκε") | |
| </a> | |
| </td> | |
| <td> | |
| <i class="fas fa-phone-alt"></i> @(student?.Telephone ?? "-") | |
| </td> | |
| <td> | |
| <i class="fas fa-envelope"></i> @application.StudentEmailShowInterestForEvent | |
| </td> | |
| <td>@application.StudentTransportNeedWhenShowInterestForCompanyEvent</td> | |
| <td> | |
| @if (application.StudentTransportNeedWhenShowInterestForCompanyEvent == "Όχι") | |
| { | |
| <span> - </span> | |
| } | |
| else if (!string.IsNullOrEmpty(application.StudentTransportChosenLocationWhenShowInterestForCompanyEvent)) | |
| { | |
| <div class="d-flex align-items-center"> | |
| <i class="fas fa-map-marker-alt text-danger mr-2"></i> | |
| <a href="https://www.google.com/maps/search/?api=1&[email protected](application.StudentTransportChosenLocationWhenShowInterestForCompanyEvent)" | |
| target="_blank" | |
| class="text-primary"> | |
| @application.StudentTransportChosenLocationWhenShowInterestForCompanyEvent | |
| </a> | |
| </div> | |
| } | |
| else | |
| { | |
| <span class="text-muted">N/A</span> | |
| } | |
| </td> | |
| </tr> | |
| } | |
| } | |
| else | |
| { | |
| <tr> | |
| <td colspan="5" class="text-center text-danger"> | |
| <strong>Καμία Εκδήλωση Ενδιαφέροντος από Φοιτητές ακόμη</strong> | |
| </td> | |
| </tr> | |
| } | |
| </tbody> | |
| </table> | |
| </div> | |
| </td> | |
| </tr> | |
| } | |
| else | |
| { | |
| <tr> | |
| <td colspan="6" class="text-center"> | |
| <strong style="color: darkred;"> | |
| Δεν Υπάρχει Εκδήλωση Ενδιαφέροντος Ακόμη από Φοιτητές... | |
| </strong> | |
| </td> | |
| </tr> | |
| } | |
| } | |
| @if (selectedEventIdForProfessors == companyevent.RNGForEventUploadedAsCompany) | |
| { | |
| @if (filteredProfessorInterestForCompanyEvents.Any()) | |
| { | |
| <br/> | |
| <tr> | |
| <td colspan="9" style="padding: 0;"> | |
| <div style="display: flex; justify-content: space-between; align-items: center; height: 24px; line-height: 24px; width: 100%;"> | |
| <i class="fa-solid fa-user-tie" style="font-size: 18px; color: #0d6efd;"></i> | |
| <label class="form-label" style="color: #0d6efd; font-weight: bold; font-size: 18px; margin: 0;">Λεπτομέρειες Ενδιαφερόμενων Καθηγητών</label> | |
| <i class="fa-solid fa-user-tie" style="font-size: 18px; color: #0d6efd;"></i> | |
| </div> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td colspan="6"> | |
| <div class="table-responsive mt-2" style="background-color: white; padding: 10px; border-radius: 5px;"> | |
| <!-- Modern Download Button --> | |
| <button class="modern-button" @onclick="DownloadProfessorListForInterestInCompanyEventAsCompany"> | |
| <i class="fas fa-download"></i> Λήψη Λίστας Ενδιαφερόμενων Καθηγητών | |
| </button> | |
| <table class="table table-striped"> | |
| <thead> | |
| <tr style="border: 1px solid darkblue;"> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-user fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Ονοματεπώνυμο | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-phone fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| Τηλέφωνο Εργασίας | |
| </th> | |
| <th style="border: 1px solid darkblue;"> | |
| <i class="fa-solid fa-envelope fa-sm" style="color: #4682b4; margin-right: 8px;"></i> | |
| </th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| @foreach (var interest in filteredProfessorInterestForCompanyEvents) | |
| { | |
| var professor = professorDataCache.TryGetValue(interest.ProfessorEmailShowInterestForCompanyEvent, out var p) ? p : null; | |
| <tr> | |
| <td> | |
| <a href="#" @onclick="() => ShowProfessorDetailsAtCompanyEventInterest(interest)"> | |
| @($"{professor?.ProfName} {professor?.ProfSurname}") | |
| </a> | |
| </td> | |
| <td> | |
| <i class="fas fa-phone-alt"></i> @professor?.ProfWorkTelephone | |
| </td> | |
| <td> | |
| <i class="fas fa-envelope"></i> @interest.ProfessorEmailShowInterestForCompanyEvent | |
| </td> | |
| </tr> | |
| } | |
| </tbody> | |
| </table> | |
| </div> | |
| </td> | |
| </tr> | |
| } | |
| else | |
| { | |
| <tr> | |
| <td colspan="6" class="text-center"> | |
| <strong style="color: darkred;"> | |
| Δεν Υπάρχει Εκδήλωση Ενδιαφέροντος Ακόμη από Καθηγητές... | |
| </strong> | |
| </td> | |
| </tr> | |
| } | |
| } | |
| } | |
| } | |
| else | |
| { | |
| <tr> | |
| <td colspan="7" class="text-center" style="font-weight: bold; color: red;">Δεν υπάρχουν Εκδηλώσεις Ακόμη</td> | |
| </tr> | |
| } | |
| </tbody> | |
| </table> | |
| <br/> | |
| <!-- Pagination Controls --> | |
| <div class="d-flex justify-content-center align-items-center mt-3 gap-1"> | |
| <!-- First Page (<<) --> | |
| <span class="pagination-item @(currentPageForCompanyEvents == 1 ? "disabled" : "")" | |
| @onclick="@(() => GoToFirstPageForCompanyEvents())"> | |
| << | |
| </span> | |
| <!-- Previous Page (<) --> | |
| <span class="pagination-item @(currentPageForCompanyEvents == 1 ? "disabled" : "")" | |
| @onclick="@(() => PreviousPageForCompanyEvents())"> | |
| < | |
| </span> | |
| <!-- Page Numbers --> | |
| @foreach (var pageNum in GetVisiblePagesForCompanyEvents()) | |
| { | |
| @if (pageNum == -1) | |
| { | |
| <span class="pagination-ellipsis">...</span> | |
| } | |
| else | |
| { | |
| <span class="pagination-item @(pageNum == currentPageForCompanyEvents ? "active" : "")" | |
| @onclick="@(() => GoToPageForCompanyEvents(pageNum))"> | |
| @pageNum | |
| </span> | |
| } | |
| } | |
| <!-- Next Page (>) --> | |
| <span class="pagination-item @(currentPageForCompanyEvents == totalPagesForCompanyEvents_CompanyEventsToSee ? "disabled" : "")" | |
| @onclick="@(() => NextPageForCompanyEvents())"> | |
| > | |
| </span> | |
| <!-- Last Page (>>) --> | |
| <span class="pagination-item @(currentPageForCompanyEvents == totalPagesForCompanyEvents_CompanyEventsToSee ? "disabled" : "")" | |
| @onclick="@(() => GoToLastPageForCompanyEvents())"> | |
| >> | |
| </span> | |
| <!-- Page counter --> | |
| <span class="ms-3">Σελίδα @currentPageForCompanyEvents από @totalPagesForCompanyEvents_CompanyEventsToSee</span> | |
| </div> | |
| <br/> | |
| <br/> | |
| </div> | |
| </div> | |
| } | |
| @if (showModal && selectedStudentToShowDetailsForInterestinCompanyEvent != null && selectedStudentFromCache != null) | |
| { | |
| <div class="modal fade show d-block" tabindex="-1" role="dialog" style="background-color: rgba(0, 0, 0, 0.5);"> | |
| <div class="modal-dialog modal-dialog-centered modal-lg" role="document"> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title" style="color: #4682B4;"> | |
| @($"{selectedStudentFromCache.Name} {selectedStudentFromCache.Surname}") | |
| </h5> | |
| <button type="button" class="close" aria-label="Close" @onclick="CloseStudentDetailsModal"> | |
| <span aria-hidden="true">×</span> | |
| </button> | |
| </div> | |
| <div class="modal-body"> | |
| <!-- Profile Picture --> | |
| <div class="text-center mb-4"> | |
| @if (selectedStudentFromCache.Image != null) | |
| { | |
| <img src="data:image/png;base64,@Convert.ToBase64String(selectedStudentFromCache.Image)" | |
| alt="Φωτογραφία Φοιτητή" | |
| style="max-width: 150px; max-height: 150px; border-radius: 50%; object-fit: cover; border: 3px solid #ddd;" /> | |
| } | |
| else | |
| { | |
| <img src="path/to/default/profile/image.png" | |
| alt="Default Profile Picture" | |
| style="max-width: 150px; max-height: 150px; border-radius: 50%; object-fit: cover; border: 3px solid #ddd;" /> | |
| } | |
| </div> | |
| <!-- Student Details --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Επίπεδο Σπουδών</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-graduation-cap mr-2"></i> | |
| <span>@selectedStudentFromCache.LevelOfDegree</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Όνοματεπώνυμο</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-user mr-2 text-primary"></i> | |
| <span>@($"{selectedStudentFromCache.Name} {selectedStudentFromCache.Surname}")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Πανεπιστήμιο</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-university mr-2 text-primary"></i> | |
| <span>@selectedStudentFromCache.University</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τμήμα</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-building mr-2"></i> | |
| <span>@selectedStudentFromCache.Department</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Αριθμός Μητρώου</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-id-card mr-2 text-info"></i> | |
| <span>@selectedStudentFromCache.RegNumber</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Email</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-envelope mr-2 text-primary"></i> | |
| <span>@selectedStudentFromCache.Email</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τηλέφωνο</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-phone mr-2 text-success"></i> | |
| <span>@(selectedStudentFromCache.Telephone ?? "N/A")</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Έτος Σπουδών</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-calendar-alt mr-2 text-info"></i> | |
| <span>@selectedStudentFromCache.StudyYear</span> | |
| </div> | |
| </div> | |
| <!-- Transport Info from Application --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Μεταφορική Ανάγκη για Εκδήλωση</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-bus mr-2"></i> | |
| <span>@selectedStudentToShowDetailsForInterestinCompanyEvent.StudentTransportNeedWhenShowInterestForCompanyEvent</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Επιλεγμένη Τοποθεσία Μεταφοράς</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-map-marker-alt mr-2 text-danger"></i> | |
| <span>@selectedStudentToShowDetailsForInterestinCompanyEvent.StudentTransportChosenLocationWhenShowInterestForCompanyEvent</span> | |
| </div> | |
| </div> | |
| <!-- Address --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Μόνιμη Διεύθυνση</label> | |
| <div class="form-control d-flex align-items-center" style="background-color: #fff;"> | |
| <i class="fas fa-map-marker-alt mr-2 text-danger"></i> | |
| @if (!string.IsNullOrEmpty(selectedStudentFromCache.PermanentAddress)) | |
| { | |
| <a href="https://www.google.com/maps/search/?api=1&[email protected](selectedStudentFromCache.PermanentAddress)" | |
| target="_blank" | |
| class="text-primary text-decoration-underline"> | |
| @selectedStudentFromCache.PermanentAddress | |
| </a> | |
| } | |
| else | |
| { | |
| <span class="text-muted">N/A</span> | |
| } | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Μόνιμη Περιοχή</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-map-marked-alt mr-2"></i> | |
| <span>@selectedStudentFromCache.PermanentRegion</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Μόνιμος Τόπος</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-city mr-2"></i> | |
| <span>@selectedStudentFromCache.PermanentTown</span> | |
| </div> | |
| </div> | |
| <!-- LinkedIn --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">LinkedIn Προφίλ</label> | |
| <div class="form-control d-flex align-items-center" style="background-color: #fff;"> | |
| <i class="fab fa-linkedin mr-2 text-info"></i> | |
| @if (!string.IsNullOrEmpty(selectedStudentFromCache.LinkedInProfile)) | |
| { | |
| <a href="@selectedStudentFromCache.LinkedInProfile" target="_blank" class="text-info text-decoration-underline"> | |
| @selectedStudentFromCache.LinkedInProfile | |
| </a> | |
| } | |
| else | |
| { | |
| <span class="text-muted">Δεν έχει οριστεί προφίλ LinkedIn ακόμη..</span> | |
| } | |
| </div> | |
| </div> | |
| <!-- Website --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Προσωπική Ιστοσελίδα</label> | |
| <div class="form-control d-flex align-items-center" style="background-color: #fff;"> | |
| <i class="fas fa-globe mr-2 text-info"></i> | |
| @if (!string.IsNullOrEmpty(selectedStudentFromCache.PersonalWebsite)) | |
| { | |
| <a href="@selectedStudentFromCache.PersonalWebsite" target="_blank" class="text-primary text-decoration-underline"> | |
| @selectedStudentFromCache.PersonalWebsite | |
| </a> | |
| } | |
| else | |
| { | |
| <span class="text-muted">Δεν έχει οριστεί ιστοσελίδα ακόμη..</span> | |
| } | |
| </div> | |
| </div> | |
| <!-- Expertise --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τομείς Εξειδίκευσης</label> | |
| <textarea class="form-control" readonly rows="3">@selectedStudentFromCache.AreasOfExpertise</textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Δεξιότητες</label> | |
| <textarea class="form-control" readonly rows="3">@selectedStudentFromCache.Keywords</textarea> | |
| </div> | |
| </div> | |
| <div class="modal-footer"> | |
| <button type="button" class="btn btn-secondary" @onclick="CloseStudentDetailsModal"> | |
| <i class="fas fa-times mr-2"></i> Κλείσιμο | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| @if (showProfessorModal && selectedProfessorToShowDetailsForInterestinCompanyEvent != null) | |
| { | |
| <div class="modal fade show d-block" tabindex="-1" role="dialog" style="background-color: rgba(0,0,0,0.5);"> | |
| <div class="modal-dialog modal-lg modal-dialog-centered" role="document"> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title" style="color: #007BFF;"> | |
| @selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfName | |
| @selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfSurname | |
| </h5> | |
| <button type="button" class="btn-close" @onclick="CloseProfessorDetailsModal" aria-label="Κλείσιμο"></button> | |
| </div> | |
| <div class="modal-body"> | |
| <!-- Profile Picture --> | |
| <div class="form-group text-center mb-3"> | |
| @if (selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfImage != null) | |
| { | |
| <img src="data:image/png;base64,@Convert.ToBase64String(selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfImage)" | |
| alt="Φωτογραφία Καθηγητή" | |
| style="max-width: 150px; max-height: 150px; border-radius: 50%; object-fit: cover;" /> | |
| } | |
| else | |
| { | |
| <p>Δεν υπάρχει φωτογραφία Προφίλ</p> | |
| } | |
| </div> | |
| <!-- Details with Icons --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Βαθμίδα</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-user-tie text-secondary me-2"></i> | |
| <span>@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfVahmidaDEP</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Email</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-envelope text-primary me-2"></i> | |
| <span>@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfEmail</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Πανεπιστήμιο</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-university text-primary me-2"></i> | |
| <span>@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfUniversity</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τμήμα</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-building text-secondary me-2"></i> | |
| <span>@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfDepartment</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Τηλέφωνο Εργασίας</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-phone-alt text-success me-2"></i> | |
| <span>@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfWorkTelephone</span> | |
| </div> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Προσωπικό Τηλέφωνο</label> | |
| <div class="form-control d-flex align-items-center"> | |
| <i class="fas fa-mobile-alt text-danger me-2"></i> | |
| <span> | |
| @(selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfPersonalTelephoneVisibility | |
| ? selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfPersonalTelephone | |
| : "Μη διαθέσιμο") | |
| </span> | |
| </div> | |
| </div> | |
| <!-- Links Section --> | |
| @if (!string.IsNullOrWhiteSpace(selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfLinkedInSite)) | |
| { | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">LinkedIn</label> | |
| <a class="form-control text-primary" href="@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfLinkedInSite" target="_blank" style="text-decoration: underline;"> | |
| <i class="fab fa-linkedin me-2"></i> | |
| @selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfLinkedInSite | |
| </a> | |
| </div> | |
| } | |
| @if (!string.IsNullOrWhiteSpace(selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfPersonalWebsite)) | |
| { | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Προσωπική Ιστοσελίδα</label> | |
| <a class="form-control text-primary" href="@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfPersonalWebsite" target="_blank" style="text-decoration: underline;"> | |
| <i class="fas fa-globe me-2"></i> | |
| @selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfPersonalWebsite | |
| </a> | |
| </div> | |
| } | |
| @if (!string.IsNullOrWhiteSpace(selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfScholarProfile)) | |
| { | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Scholar</label> | |
| <a class="form-control text-primary" href="@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfScholarProfile" target="_blank" style="text-decoration: underline;"> | |
| <i class="fas fa-graduation-cap me-2"></i> | |
| @selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfScholarProfile | |
| </a> | |
| </div> | |
| } | |
| <!-- Professor ORCID Profile --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">ORCID Profile</label> | |
| <div class="form-control d-flex align-items-center" style="height: auto;"> | |
| <i class="fas fa-id-card" style="color: #A6CE39; margin-right: 8px;"></i> | |
| @if (!string.IsNullOrWhiteSpace(selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfOrchidProfile)) | |
| { | |
| <a href="@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfOrchidProfile" target="_blank" class="flex-grow-1 text-truncate" style="text-decoration:none; color:#A6CE39;"> | |
| @selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfOrchidProfile | |
| </a> | |
| } | |
| else | |
| { | |
| <span class="flex-grow-1 text-muted">Δεν Διατίθεται</span> | |
| } | |
| </div> | |
| </div> | |
| <!-- Text Areas --> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Πεδίο Εργασίας</label> | |
| <textarea class="form-control" readonly> | |
| @(selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfGeneralFieldOfWork ?? "Δεν έχει Καθοριστεί") | |
| </textarea> | |
| </div> | |
| <div class="form-group"> | |
| <label style="font-weight: bold;">Προσωπική Περιγραφή</label> | |
| <textarea class="form-control" rows="3" readonly>@selectedProfessorToShowDetailsForInterestinCompanyEvent.ProfPersonalDescription</textarea> | |
| </div> | |
| </div> | |
| <div class="modal-footer"> | |
| <button type="button" class="btn btn-secondary" @onclick="CloseProfessorDetailsModal">Κλείσιμο</button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| } | |
| <!-- Modal for editing company event --> | |
| @if (isEditModalVisibleForEventsAsCompany) | |
| { | |
| <div class="modal fade show" style="display: block;" tabindex="-1" role="dialog" aria-modal="true"> | |
| <div class="modal-dialog modal-lg" role="document"> | |
| <div class="modal-content"> | |
| <div class="modal-header"> | |
| <h5 class="modal-title" style="color: #007BFF;">Επεξεργασία Εκδήλωσης</h5> | |
| <button type="button" class="close" @onclick="CloseEditModalForCompanyEvent">×</button> | |
| </div> | |
| <div class="modal-body"> | |
| <!-- Τίτλος Εκδήλωσης --> | |
| <div class="form-group"> | |
| <label><strong>Τίτλος Εκδήλωσης</strong></label> | |
| <input type="text" class="form-control" @bind="currentCompanyEvent.CompanyEventTitle" /> | |
| </div> | |
| <!-- Περιγραφή Εκδήλωσης --> | |
| <div class="form-group"> | |
| <label><strong>Περιγραφή Εκδήλωσης</strong></label> | |
| <textarea class="form-control" @bind="currentCompanyEvent.CompanyEventDescription"></textarea> | |
| </div> | |
| <!-- Τύπος Εκδήλωσης --> | |
| <div class="form-group"> | |
| <label><strong>Τύπος Εκδήλωσης</strong></label> | |
| <select class="form-control" @bind="currentCompanyEvent.CompanyEventType"> | |
| <option value="">-- Επιλέξτε Τύπο Εκδήλωσης --</option> | |
| <option value="Έκθεση">Έκθεση</option> | |
| <option value="Hackathon">Hackathon</option> | |
| <option value="Career Day">Career Day</option> | |
| <option value="Seminar">Σεμινάριο</option> | |
| <option value="Επίσκεψη">Επίσκεψη</option> | |
| <option value="Άλλο">Άλλο</option> | |
| </select> | |
| </div> | |
| <!-- Υπεύθυνος Εκδήλωσης --> | |
| <div class="form-group"> | |
| <label><strong>Υπεύθυνος Εκδήλωσης</strong></label> | |
| <input type="text" class="form-control" @bind="currentCompanyEvent.CompanyEventResponsiblePerson" /> | |
| </div> | |
| <!-- Email Υπευθύνου --> | |
| <div class="form-group"> | |
| <label><strong>Email Υπευθύνου</strong></label> | |
| <input type="email" class="form-control" @bind="currentCompanyEvent.CompanyEventResponsiblePersonEmail" /> | |
| </div> | |
| <!-- Τηλέφωνο Υπευθύνου --> | |
| <div class="form-group"> | |
| <label><strong>Τηλέφωνο Υπευθύνου</strong></label> | |
| <input type="text" class="form-control" @bind="currentCompanyEvent.CompanyEventResponsiblePersonTelephone" /> | |
| </div> | |
| <!-- Τμήμα Εταιρείας --> | |
| <div class="form-group"> | |
| <label><strong>Τμήμα Εταιρείας</strong></label> | |
| <input type="text" class="form-control" @bind="currentCompanyEvent.CompanyEventCompanyDepartment" /> | |
| </div> | |
| <!--Περιφέρεια Εκδήλωσης (Region) --> | |
| <div class="form-group"> | |
| <label for="CompanyEventDimosLocation"><strong>Περιφέρεια Εκδήλωσης</strong></label> | |
| <select id="CompanyEventPerifereiaLocation" class="form-control" | |
| @bind="currentCompanyEvent.CompanyEventPerifereiaLocation" | |
| @bind:event="onchange"> | |
| <option value="">-- Επιλέξτε Περιφέρεια --</option> | |
| @foreach (var region in Regions) | |
| { | |
| <option value="@region">@region</option> | |
| } | |
| </select> | |
| </div> | |
| <!-- Δήμος Εκδήλωσης (Town) --> | |
| <div class="form-group"> | |
| <label for="CompanyEventDimosLocation"><strong>Δήμος Εκδήλωσης</strong></label> | |
| <select id="CompanyEventDimosLocation" class="form-control" | |
| @bind="currentCompanyEvent.CompanyEventDimosLocation"> | |
| <option value="">-- Επιλέξτε Δήμο --</option> | |
| @if (!string.IsNullOrEmpty(currentCompanyEvent.CompanyEventPerifereiaLocation) && | |
| RegionToTownsMap.ContainsKey(currentCompanyEvent.CompanyEventPerifereiaLocation)) | |
| { | |
| foreach (var town in RegionToTownsMap[currentCompanyEvent.CompanyEventPerifereiaLocation]) | |
| { | |
| <option value="@town">@town</option> | |
| } | |
| } | |
| </select> | |
| </div> | |
| <!-- Χώρος Εκδήλωσης --> | |
| <div class="form-group"> | |
| <label><strong>Χώρος Εκδήλωσης</strong></label> | |
| <input type="text" id="autocomplete" class="form-control" @bind="currentCompanyEvent.CompanyEventPlaceLocation" /> | |
| </div> | |
| <!-- Ταχυδρομικός Κώδικας --> | |
| <div class="form-group"> | |
| <label><strong>Ταχυδρομικός Κώδικας</strong></label> | |
| <input type="text" class="form-control" @bind="currentCompanyEvent.CompanyEventPostalCodeLocation" /> | |
| </div> | |
| <!-- Ημερομηνία Εκδήλωσης --> | |
| <div class="form-group"> | |
| <label><strong>Ημερομηνία Εκδήλωσης</strong></label> | |
| <input type="date" class="form-control" @bind="currentCompanyEvent.CompanyEventActiveDate" /> | |
| </div> | |
| <!-- Ώρα Εκδήλωσης --> | |
| <div class="form-group"> | |
| <label><strong>Ώρα Εκδήλωσης</strong></label> | |
| <input type="time" class="form-control" @bind="currentCompanyEvent.CompanyEventTimeOnly" /> | |
| </div> | |
| <br/> | |
| <!-- UPDATED: Areas with Subfields for Events --> | |
| <div class="form-group"> | |
| <label @onclick="ToggleCheckboxesForEditCompanyEvent" style="cursor: pointer; display: flex; align-items: center;"> | |
| <strong>Περιοχές Ενδιαφέροντος</strong> | |
| <span style="color: #1565c0; font-size: 0.9em; margin-left: 8px; display: flex; align-items: center;"> | |
| <i class="fas @(showCheckboxesForEditCompanyEvent ? "fa-chevron-up" : "fa-chevron-down")" style="margin-right: 4px;"></i> | |
| @(showCheckboxesForEditCompanyEvent ? "Κλείσιμο" : "Άνοιγμα") | |
| </span> | |
| </label> | |
| @if (showCheckboxesForEditCompanyEvent) | |
| { | |
| <div id="toggleCheckboxes" class="checkbox-container"> | |
| @foreach (var area in Areas) | |
| { | |
| <div class="area-container" style="margin-bottom: 8px; border: 2px solid #1565c0; border-radius: 4px; padding: 8px; background-color: #f8f9fa;"> | |
| <div class="form-check area-header"> | |
| <input type="checkbox" | |
| id="[email protected]" | |
| class="form-check-input" | |
| @onchange="(e) => OnAreaCheckedChangedForEditCompanyEvent(e, area)" | |
| checked="@IsAreaSelectedForEditCompanyEvent(area)" /> | |
| <label class="form-check-label area-label" | |
| for="[email protected]" | |
| @onclick="@(() => ToggleSubFieldsForEditCompanyEvent(area))" | |
| @onclick:stopPropagation="true" | |
| style="cursor: pointer; font-weight: bold; display: flex; align-items: center; justify-content: space-between; width: 100%; color: #1565c0;"> | |
| @area.AreaName | |
| <span class="expand-icon" style="font-size: 10px; transition: transform 0.2s; margin-left: 8px;">▶</span> | |
| </label> | |
| </div> | |
| @if (ExpandedAreasForEditCompanyEvent.Contains(area.Id)) | |
| { | |
| <div class="subfields-container" style="margin-top: 8px; margin-left: 20px; padding-left: 15px; border-left: 2px solid #1565c0;"> | |
| @if (!string.IsNullOrEmpty(area.AreaSubFields)) | |
| { | |
| var subFields = area.AreaSubFields.Split(',').Select(s => s.Trim()).ToList(); | |
| @foreach (var subField in subFields) | |
| { | |
| <div class="form-check subfield-checkbox" style="margin-bottom: 4px;"> |
View raw
(Sorry about that, but we can’t show files that are this big right now.)
View raw
(Sorry about that, but we can’t show files that are this big right now.)
View raw
(Sorry about that, but we can’t show files that are this big right now.)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment