Ignore:
Timestamp:
10/12/24 21:32:15 (3 months ago)
Author:
macagaso <gasoskamarija@…>
Branches:
master
Parents:
743de55
Message:

Updated version

Location:
src/main/resources/static/js
Files:
2 added
9 edited

Legend:

Unmodified
Added
Removed
  • src/main/resources/static/js/admin-terms.js

    r743de55 r43c9090  
    11import { deleteAppointment, confirmCarriedOut, getUsersByTermExcept, removeRequestAndUpdateUser, removeAppointment, makeReservation ,displayDiv} from './shared.js';
    22
     3let lastClickedItem=null;
    34let calendar = document.querySelector('.calendar')
    45let importantDate;
     
    109110    }));
    110111
    111     await fetch(`/api/appointments/create`, {
     112    const response=await fetch(`/api/appointments/create`, {
    112113        method: 'POST',
    113114        headers: {
    114115            'Content-Type': 'application/json',
    115116        },
    116         body: JSON.stringify(requestBody) // Send all appointments in one request
     117        body: JSON.stringify(requestBody)
    117118    });
     119    if(response.ok){
     120        location.reload();
     121    }
     122
    118123}
    119124document.getElementById('create-appointments').addEventListener('click', async function () {
     
    124129    const interval = parseInt(document.getElementById('time-interval').value);
    125130
    126     if (!startDate || !endDate || !startTime || !endTime || !interval) {
     131    if (!startDate || !endDate || !startTime || !endTime || isNaN(interval)) {
    127132        alert("Please fill out all the fields.");
    128133        return;
     
    142147            const existingTimes = existingMapped.get(date);
    143148            if (checkOverlap(existingTimes, time)) {
    144                 conflictingAppointments.push(newAppointment);  // Add to conflict list if overlaps
     149                conflictingAppointments.push(newAppointment);
    145150            } else {
    146151                successfulAppointments.push(newAppointment);
     
    240245        requestedRow.appendChild(couponCodeTd);
    241246        requestedElement.appendChild(requestedRow);
    242         displayDiv(dateTime);
    243247    })
     248    displayDiv(dateTime);
    244249}
    245250function getAllRequests(dateTime,containerId){
     
    277282
    278283        itemDiv.addEventListener('click', async () => {
     284            document.getElementById("summary").style.display='none';
    279285            try{
    280 
     286                if(lastClickedItem){
     287                    lastClickedItem.style.backgroundColor="#f9f9f9";
     288                }
     289                lastClickedItem=itemDiv;
     290                itemDiv.style.backgroundColor="grey";
    281291                const isReserved=await isAppointmentReserved(item.localDateTime);
    282292                const isEmpty=await isAppointmentEmpty(item.localDateTime);
     
    285295                cleanData("requested")
    286296                if (isReserved) {
     297                    document.getElementById("summary").style.display='block';
    287298                    document.getElementById("approved-table").style.display = 'block';
    288299                    document.getElementById("requested-table").style.display = 'none';
     
    292303                    deleteBtn.setAttribute("term",item.localDateTime);
    293304                    deleteBtn.setAttribute("type","cancelledAppointmentByAdmin");
    294                     //da go isprogramirash delete-approval
    295305                    document.getElementById("delete-approval").addEventListener('click', function() {
    296306                        removeAppointment(item.localDateTime,"cancelledAppointmentByAdmin");
     
    307317                }
    308318                else if(!isEmpty){
     319                    document.getElementById("summary").style.display='block';
    309320                    document.getElementById("approved-table").style.display = 'none';
    310321                    document.getElementById("requested-table").style.display = 'block';
     
    316327                }
    317328                else{
     329                    document.getElementById("summary").style.display='none';
    318330                    document.getElementById("approved-table").style.display = 'none';
    319331                    document.getElementById("requested-table").style.display = 'none';
     
    365377    let currDate = new Date()
    366378
    367     // if (!month) month = currDate.getMonth()
    368379    console.log(month);
    369380    if (typeof month !== 'number') month = currDate.getMonth();
     
    374385    calendar_header_year.innerHTML = year
    375386
    376     // get first day of month
    377387
    378388    let first_day = new Date(year, month, 1)
     
    395405            }
    396406            day.addEventListener('click', () => {
     407                document.getElementById("summary").style.display='none';
    397408                let temp=document.getElementsByClassName('curr-date');
    398409                Array.from(temp).forEach(element => {
     
    458469    const otherPickersInterval = 30;
    459470
    460     for (let hour = 7; hour < 22; hour++) { // 0 to 23 for 24-hour format
     471    for (let hour = 7; hour < 22; hour++) {
    461472        for (let minutes = 0; minutes < 60; minutes++) {
    462473            const formattedHour = hour.toString().padStart(2, '0');
     
    504515        .then(data => {
    505516            console.log(data.message);
     517            location.reload();
    506518        })
    507519        .catch(error => {
     
    525537        if (response.ok) {
    526538            alert("Free appointments for the selected date range were deleted.");
     539            location.reload();
    527540        } else {
    528541            alert("An error occurred while trying to delete the appointments.");
  • src/main/resources/static/js/adminNewsCoupons.js

    r743de55 r43c9090  
    66let selectedImage;
    77let questionable;
     8let helper;
    89
    910let pageType;
     
    3839                    imagePreview.style.display='inline';
    3940                    imagePreview.innerHTML = `<img src="${e.target.result}" style="width: 100%; height: auto;">`;
    40                     selectedImage =e.target.result ; // Store the selected file
     41                    selectedImage =e.target.result ;
    4142
    4243                    console.log(selectedImage);
     
    300301        document.getElementById('text').value = param2;
    301302        let importantValue=newsItem.querySelector('img').getAttribute("data-attribute");
     303        selectedImage=importantValue;
    302304        document.getElementById('main-image').innerHTML=`<img src="${importantValue}" style="width: 20%; height: 20%;">`;
    303305    }
  • src/main/resources/static/js/authentication-shared.js

    r743de55 r43c9090  
    99
    1010function phoneCheck(phone){
    11     const phonePattern = /^07\d-\d{3}-\d{3}$/;
     11    const phonePattern = /^07\d\d{3}\d{3}$/;
    1212    if (!phonePattern.test(phone)) {
    1313        return false;
     
    3232    return regex.test(password);
    3333}
    34 export async function verificationCheck(userData) {
     34export async function verificationCheck(userData,condition) {
    3535    if (!usernameCheck(userData.username)) {
    3636        alert("Invalid username");
     
    5656        }
    5757    }
    58     const response = await fetch(`/api/users/checkDifferentUser`, {
    59         method: "POST",
    60         headers: {
    61             'Content-Type': 'application/json'
    62         },
    63         body: JSON.stringify(userData)
    64     });
    65     if (response.ok) {
    66         return true;
    67     } else {
    68         return false;
     58    if(condition!==false){
     59        const response = await fetch(`/api/users/checkDifferentUser`, {
     60            method: "POST",
     61            headers: {
     62                'Content-Type': 'application/json'
     63            },
     64            body: JSON.stringify(userData)
     65        });
     66        if (response.ok) {
     67            return true;
     68        } else {
     69            return false;
     70        }
    6971    }
    70 
     72    return true;
    7173}
  • src/main/resources/static/js/calendar.js

    r743de55 r43c9090  
     1let lastClickedItem=null;
    12let calendar = document.querySelector('.calendar')
    23
     
    1920        document.getElementById("last-check").innerHTML=window.selectedTime;
    2021        showModal();
     22        document.getElementById("coupon-type").selectedIndex=0;
     23        document.getElementById("medical-condition").innerHTML='';
     24
    2125    }
    2226
     
    7175function displayFreeAppointments(appointments) {
    7276    const container = document.getElementById('hourly-terms');
    73     container.innerHTML = ''; // Clear previous appointments
     77    container.innerHTML = '';
    7478
    7579    appointments.forEach(appointment => {
     
    8892
    8993        appointmentDiv.textContent = formattedTime;
    90         appointmentDiv.dataset.time = formattedDate+" "+formattedTime; // Store full date-time
     94        appointmentDiv.dataset.time = formattedDate+" "+formattedTime;
    9195
    9296        appointmentDiv.addEventListener('click', () => {
     97            if(lastClickedItem){
     98                lastClickedItem.style.backgroundColor="white";
     99            }
     100            lastClickedItem=appointmentDiv;
     101            lastClickedItem.style.backgroundColor="grey";
    93102            window.selectedTime = appointmentDiv.dataset.time;
    94103            document.getElementById('book-button').disabled = false;
     
    109118
    110119    let currDate = new Date()
    111     if (!month) month = currDate.getMonth()
     120
     121    if (typeof month !== 'number') month = currDate.getMonth();
    112122    if (!year) year = currDate.getFullYear()
    113123
     
    129139                            <span></span>`;
    130140            let selectedDate = `${year}-${(month + 1).toString().padStart(2, '0')}-${(i - first_day.getDay() + 1).toString().padStart(2, '0')}`;
    131             day.addEventListener('click', () => fetchFreeOrPendingAppointments(selectedDate));
     141            day.addEventListener('click', () => {
     142                let temp=document.getElementsByClassName('curr-date');
     143                Array.from(temp).forEach(element => {
     144                    element.classList.remove('curr-date');
     145                });
     146                day.classList.add('curr-date');
     147                document.getElementById("coupon-type").selectedIndex=0;
     148                document.getElementById("medical-condition").value='';
     149                fetchFreeOrPendingAppointments(selectedDate);
     150            })
    132151
    133152            if (i - first_day.getDay() + 1 === currDate.getDate() && year === currDate.getFullYear() && month === currDate.getMonth()) {
     
    176195
    177196
    178 
     197window.onload = async function () {
     198temp=document.getElementById("coupon-type");
     199    try{
     200        const response = await fetch(`/api/coupons/getCouponNames`);
     201        if (response.ok) {
     202            const couponNames = await response.json();
     203            console.log("Coupons:", couponNames);
     204
     205            couponNames.forEach(coupon => {
     206                const option = document.createElement("option");
     207                option.value = coupon;
     208                option.textContent = coupon;
     209                temp.appendChild(option);
     210            });
     211        } else {
     212            console.log(response.statusText);
     213        }
     214    }
     215    catch(error){
     216        console.error("Error fetching coupons:", error);
     217    }
     218
     219};
  • src/main/resources/static/js/editUser.js

    r743de55 r43c9090  
    33import { verificationCheck } from './authentication-shared.js';
    44
    5 let loggedPerson;
     5let loggedPerson,checkDifferent;
    66const modal = document.getElementById('popupModal');
    77const cancelBtn = document.getElementById('cancelBtn');
     
    7171        counter= user.carriedOut.length;
    7272    }
    73     console.log(counter);
    7473    return counter;
    7574}
     
    122121            buttonCell.appendChild(button1);
    123122            button2.textContent = "Потврди одржан";
    124             button2.addEventListener('click',()=>
    125                 function(){
     123            buttonCell.appendChild(button2);
     124            button2.addEventListener('click',()=> {
    126125                modal.style.display='flex';
    127                 approveBtn.addEventListener('click', () => {
    128                     const userInput = document.getElementById('userInput').value;
    129                     confirmCarriedOut(request.term,userInput);
    130                     modal.style.display = 'none'; // Close the modal after approval
    131                 });
     126                document.getElementById("userInput").disabled=false;
    132127            });
    133             buttonCell.appendChild(button2);
     128            approveBtn.addEventListener('click', () => {
     129                const userInput = document.getElementById('userInput').value;
     130                confirmCarriedOut(request.term,userInput);
     131                modal.style.display = 'none';
     132            });
     133
    134134        }
    135135
     
    146146    if(selectedValue==="requests"){
    147147        url=`/api/requests/listAll?username=${loggedPerson.username}`;
    148         tHeadArray=["Термин", "Опции"];
     148        tHeadArray=["Термин","Медицинска состојба","Опции"];
    149149        createHeader(tHeadArray);
    150150        getAll(url);
     
    153153        let testTemp="RESERVED";
    154154        url=`/api/appointments/listAll?username=${loggedPerson.username}&status=${testTemp}`;
    155         tHeadArray=["Термин", "Опции"];
     155        tHeadArray=["Термин","Медицинска состојба", "Опции"];
    156156        createHeader(tHeadArray);
    157157        getAll(url);
     
    230230        .catch(error => {
    231231            console.error('Error fetching user data:', error);
    232             return { name: '', surname: '' };  // return empty values on error
     232            return { name: '', surname: '' };
    233233        });
    234234}
     
    267267        if (cookieUsername) {
    268268            fetchUserData(cookieUsername,"USER").then(userData => {
    269                 const fullName = `${userData.name} ${userData.surname}`;
    270                 document.getElementById('cookie-name').innerHTML = fullName;
     269            console.log("success")
    271270            });
    272         } else {
    273             document.getElementById('cookie-name').textContent = 'Default Name';
    274271        }
    275272    }
     
    277274function saveProfileChanges() {
    278275    const userName = document.querySelector('input[name="username"]').value;
    279     console.log(userName);
     276    const phoneNum=document.querySelector('input[name="phone"]').value.replace(/-/g,"")
     277    console.log(phoneNum);
    280278    const updatedData = {
    281279        username: userName,
    282280        name: document.querySelector('input[name="firstName"]').value,
    283281        surname: document.querySelector('input[name="lastName"]').value,
    284         phone: document.querySelector('input[name="phone"]').value,
     282        phone: phoneNum,
    285283        age: document.querySelector('input[name="age"]').value
    286284    };
    287     if(!verificationCheck(updatedData)){
     285    if(!verificationCheck(updatedData,checkDifferent)){
    288286        return;
    289287    }
     
    299297        .then(data => {
    300298            alert('Profile updated successfully!');
    301             toggleEditing(false); // Disable fields after saving changes
     299            toggleEditing(false);
    302300            updateCookieUsername(userName);
    303301        })
     
    313311    };
    314312}
     313function removeOptions(){
     314    if(getRoleFromCookie()!=="ADMIN"){
     315        let temp=this;
     316        temp.removeChild(document.getElementById("requests"));
     317        temp.removeChild(document.getElementById("appointments"))
     318    }
     319}
    315320
    316321function toggleEditing(isEnabled) {
     
    322327
    323328window.onload = function(){
     329    checkDifferent=true;
    324330    updateProfile();
    325331    toggleEditing(false);
    326332    document.getElementById('edit-profile').addEventListener('click', function() {
    327333       const role=getQueryParams();
    328        if(role.param1 ==='ADMIN')
    329         toggleEditing(true);
     334       if(role.param1 ==='ADMIN'){
     335           toggleEditing(true);
     336           checkDifferent=false;
     337       }
     338
    330339    });
    331340    document.getElementById('saveChanges').addEventListener('click', saveProfileChanges);
    332341    document.getElementById("statusDropdown").addEventListener('change',createRowsBasedOnType);
    333 
    334 }
     342    document.getElementById("statusDropdown").addEventListener('click',removeOptions);
     343}
  • src/main/resources/static/js/index.js

    r743de55 r43c9090  
    11import { verificationCheck } from "./authentication-shared.js";
    2 
    32function toggleForm(formId, show) {
    43        const form = document.getElementById(formId);
     
    6059                });
    6160            }
     61            else{
     62                alert("Sign in successfull! Now log in!")
     63            }
    6264            return response.json();
    6365        })
    6466        .then(data => {
    65             console.log(data.message); // Handle success message
     67            console.log(data.message);
    6668        })
    6769        .catch(error => {
     
    9799            console.log('Parsed data:', data);
    98100            if (data.success) {
    99                 const name=data.name;
    100                 const surname=data.surname;
    101                 const personalisedSection=document.getElementById("personalised");
    102                 personalisedSection.innerHTML=`Добредојде, ${name} ${surname}!`;
    103101                updateUIBasedOnRole(data.userRole);
    104102            }
     
    108106        })
    109107        .finally(() => {
    110             // Close the form after handling the response
    111108            toggleForm('loginForm', false);
    112109        });
  • src/main/resources/static/js/shared.js

    r743de55 r43c9090  
    2121            if (!response.ok) {
    2222                throw new Error('Failed to delete the appointment');
     23            }
     24            else{
     25                location.reload();
    2326            }
    2427        })
     
    4750
    4851            if (updateResponse.ok) {
     52                location.reload();
    4953                console.log(`User updated successfully in carried_out`);
    5054            } else {
     
    136140
    137141            }
     142            location.reload();
    138143
    139144        } else {
     
    149154        if (response.ok) {
    150155            console.log('Appointment added successfully.');
     156            location.reload();
    151157        } else {
    152158            const text = await response.text();
     
    160166export function displayDiv(dateTime,username){
    161167    if (typeof username !== 'undefined'){
    162         makeReservation(dateTime,username);
     168        makeReservation(dateTime, username);
    163169    }
    164170    else{
    165         const inputValue = document.getElementById("username-approval");
    166         const approvedUser = inputValue.value;
    167         document.getElementById("confirm-approval").addEventListener('click',makeReservation(dateTime,approvedUser));
     171        let temp=document.getElementById("confirm-approval");
     172        temp.addEventListener('click',()=>{
     173            const approvedUser = document.getElementById("username-approval").value;
     174            makeReservation(dateTime,approvedUser)
     175        });
    168176    }
    169177}
  • src/main/resources/static/js/terms.js

    r743de55 r43c9090  
    5050    dialog.setAttribute("id","dialogPopUp");
    5151    const message = document.createElement('p');
    52     message.textContent = 'Are you sure you want to cancel the reservation?';
     52    message.textContent = 'Дали сте сигурни дека сакате да откажете?';
    5353    dialog.appendChild(message);
    5454    const yesButton = document.createElement('button');
     
    107107        row.appendChild(termCell);
    108108        const nameCell = document.createElement('td');
    109         nameCell.textContent = request.name; // Format date
     109        nameCell.textContent = request.name;
    110110        row.appendChild(nameCell);
    111111        const surnameCell = document.createElement('td');
    112         surnameCell.textContent = request.surname; // Format date
     112        surnameCell.textContent = request.surname;
    113113        row.appendChild(surnameCell);
    114114        const couponCodeCell = document.createElement('td');
     
    119119        row.appendChild(additionalInfoCell);
    120120        const usernameCell = document.createElement('td');
    121         usernameCell.textContent = request.username; // Format date
     121        usernameCell.textContent = request.username;
    122122        row.appendChild(usernameCell);
    123123        const buttonCell = document.createElement('td');
     
    139139    const oldHead = document.getElementById('initial-head');
    140140    if (thead) {
    141         console.log("cleaned")
    142141        thead.innerHTML = '';
    143142    }
     
    165164        const row = document.createElement('tr');
    166165        const termCell = document.createElement('td');
    167         termCell.textContent = replaceWithSpace(request.dateTime); // Format date
     166        termCell.textContent = replaceWithSpace(request.dateTime);
    168167        row.appendChild(termCell);
    169168        const userCell = document.createElement('td');
     
    171170        row.appendChild(userCell);
    172171        const adminCell = document.createElement('td');
    173         adminCell.textContent = request.adminNote; // Format date
     172        adminCell.textContent = request.adminNote;
    174173        row.appendChild(adminCell);
    175174        const statusCell = document.createElement('td');
  • src/main/resources/static/js/users-view.js

    r743de55 r43c9090  
    1212}
    1313function calculateAge(dateBirth){
    14     console.log(dateBirth);
    1514    const [year, month, day] = dateBirth.split('-').map(Number);
    1615    const birthDate = new Date(year, month - 1, day);
     
    5554        button.addEventListener('click',()=>{
    5655            let temp=user.username;
    57             console.log(temp);
    5856                const params = new URLSearchParams({ param1: 'ADMIN', param2: temp }).toString();
    5957                window.location.href = `editUser.html?${params}`;
     
    9088   document.getElementById("search-input-container").style.display = 'none';
    9189    const selectedValue = event.currentTarget.value;
    92     console.log(selectedValue);
    9390    if(selectedValue!=='defaultValue')
    9491    filterUsers("status",selectedValue).then(r => console.log(r));
     
    9895    setInitialSelectValue(userStatusElement);
    9996    const dataCheck = event.currentTarget.value;
    100     console.log(dataCheck);
    10197    updateSearchInputVisibility(dataCheck);
    10298
    10399    document.getElementById("search-button").addEventListener('click',function (){
    104100        let filterTemp=document.getElementById("search-input");
    105         console.log(filterTemp.value);
    106101        filterUsers(dataCheck,filterTemp.value).then(r => console.log(r));
    107102        filterTemp.value='';
Note: See TracChangeset for help on using the changeset viewer.