// catalog.js
let favoriteArray = localStorage.getItem('favorite') ? JSON.parse(localStorage.getItem('favorite')) : [];
let timer, second = 1;
let sJson = [];
// let statusProgram = false;
let totalRecords = 0;
let totalLoadedRecords = 0;
var addToShoppingCartEvent;
let isLoadingNow = false;
/**
* need for load sessions on courses
* */
/*function loadDataForNewPage111(page) {
console.log("loadDataForNewPage:" + page);
const origOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function () {
this.addEventListener('load', (event) => {
if (event['currentTarget'].responseURL.includes("entityRosterView.ajax")) {
let boxItems = document.querySelectorAll("#rosterRecords > div:nth-child(" + page + ") div[role='catalog-item']");
boxItems.forEach((item, index) => { console.log(item)
ajaxLoadSessionsCatalogElement(item.dataset.id);
})
console.log("11111:" + statusProgram);
if (statusProgram) {
if (boxItems.length>0)
showBtnBuyProgram(boxItems);
}else{
let btnAddProgramToCart = document.querySelector("#addAllSessions");
if (btnAddProgramToCart != null)
btnAddProgramToCart.remove();
}
}
});
origOpen.apply(this, arguments);
}
}*/
function getSuperuser(){
let su = document.querySelector('[data-superuser]');
if (su != null){
return su.dataset.superuser;
}
return null;
}
function loadDataForNewPage(page) {
console.log("loadDataForNewPage:" + page);
// let boxItems = document.querySelectorAll("#rosterRecords > div:nth-child(" + page + ") div[role='catalog-item']");
let boxItems = document.querySelectorAll("div:not(.session_loaded)[role='catalog-item']");
var count = boxItems.length;
boxItems.forEach((item, index) => {
ajaxLoadSessionsCatalogElement(item.dataset.id, function(){
count--;
//console.log(count)
if (count == 0){
console.log('on success sessions load (must be once)')
let boxItems = document.querySelectorAll("div[role='catalog-item']");
document.querySelectorAll("[name='entityInstanceForm.instanceFilter.v[592856]']").forEach((item, index) => {
let checkboxStatus = item.checked;
if (checkboxStatus && boxItems.length>0){
showBtnBuyProgram(boxItems);
}
})
}
});
item.className += ' session_loaded';
});
$(".input-group:not(.onchangeset)").on('change', 'select', function (event) {
let boxParent = event.target.closest(".product-meta");
let btnBy = bx = boxParent.querySelector(".btn2");
if(btnBy)
event.target.parentNode.lastChild.previousElementSibling.lastChild.previousSibling.childNodes.forEach(el => {
if (el.classList.contains('selected')) {
// console.log('test')
showButton(btnBy, el);
}
})
});
$(".input-group").addClass('onchangeset');
document.querySelectorAll('[data-zeropricehide="0"]').forEach((zero, index) => {
zero.style.display = 'none';
});
}
function arrayRemove(arr, value) {
return arr.filter(function (ele) {
return ele != value;
});
}
function counterStart(form, element) {
if (timer) {
clearInterval(timer);
}
second = 1;
timer = setInterval(function () {
second++;
if (second == 2) {
clearForm(form, element);
form.submit();
}
}, 1000);
//console.log(timer)
}
function isPurchased(sessionId) {
for (let e in sJson) {
if (sJson[e].session == sessionId) {
return true; // sJson[e].purchased == 'Yes';
}
}
return false;
}
function clearForm(form, inputEl) {
let labelNode = inputEl.nextElementSibling;
let textElement = labelNode.textContent;
const regex = /Program/i;
const found = textElement.match(regex);
if (found !== null) {
let elements = form.querySelectorAll("input");
//form.reset();
elements.forEach(element => {
if (!inputEl.isEqualNode(element)) {
let fieldType = element.type.toLowerCase();
switch (fieldType) {
case "text":
case "number":
element.value = "";
break;
case "checkbox":
if (element.checked) {
element.checked = false;
}
break;
default:
break;
}
}
})
}
}
function addToWL(id) {
let xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
window.location.href = "/site/portal/lms/waiting_list"
}
};
xhttp.open("GET", "/entity/instance/add_to_waiting_list/view.html?entityInstanceId=" + id + "&add_to_waiting_list=true", true);
xhttp.send();
}
function showBtnPurchased(btnBy) {
btnBy.innerText = "Session achetée";
btnBy.style.background = "rgb(204 202 204)";
btnBy.addEventListener('click', event => {
});
}
function showBtnCompleted(btnBy) {
btnBy.innerText = "Session complète";
btnBy.style.background = "rgb(204 202 204)";
btnBy.addEventListener('click', event => {
});
}
function showBtnProgram(btnBy) {
// btnBy.innerText = "In Program";
btnBy.innerText = "Programme";
btnBy.style.background = "#ef3300";
/*btnBy.innerText = "";
btnBy.style.background = "#fff";*/
btnBy.addEventListener('click', event => {
location.href = '/site/portal/lms/catalogue?entityRosterId=4&entityInstanceForm.term=Module&entityInstanceForm.instanceFilter.v[592856]=' + btnBy.dataset.program
});
}
function showBtnNoSession(btnBy, sessionsRosterList) {
btnBy.innerText = "No session";
btnBy.style.background = "#ccc";
sessionsRosterList.closest(".input-group").style.display = "none";
btnBy.addEventListener('click', event => {
});
}
function showBtnBuy(btnBy, el) {
btnBy.innerHTML = " Ajouter au panier ";
btnBy.removeAttribute("style");
if (btnBy.dataset.minprice !== "0"){
console.log("has price")
addToShoppingCartEvent = function(event) {
event.preventDefault();
addToShoppingCart2(el.dataset.value, 1, 'false')
}
} else {
console.log("has no price")
addToShoppingCartEvent = function(event) {
event.preventDefault();
Swal.fire({
title: "",
html: "Nous sommes désolés, vous ne pouvez pas vous inscrire à cette activité, car votre profil ne répond pas à certains critères. Pour plus d’information, veuillez écrire à formation@umq.qc.ca",
icon: "error"
});
}
}
btnBy.addEventListener('click', addToShoppingCartEvent);
}
function showBtnApprove(btnBy, el) {
btnBy.innerText = "Ajouter à la liste d'attente";
btnBy.style.background = "#ccc";
btnBy.addEventListener('click', event => {
event.preventDefault();
addToWL(el.dataset.value);
});
}
function f() {
}
function showButton(btnBy, el) {
// console.log("showButton for session " + el.dataset.sid);
let statusProgram = false;
document.querySelectorAll("[name='entityInstanceForm.instanceFilter.v[592856]']").forEach((item, index) => {
let checkboxStatus = item.checked;
if (checkboxStatus)
statusProgram = true;
})
statusProgram |= btnBy.dataset.program != '';
btnBy.style.display = 'block';
if (statusProgram) {
showBtnProgram(btnBy);
}else{
btnBy.removeEventListener('click', addToShoppingCartEvent);
/*if (isPurchased(el.dataset.sid)) {
// console.log("purchased");
showBtnPurchased(btnBy);
} else {
// console.log("not purchased, needs approve?");
if (el.dataset.approve !== "No") {
// console.log("approve Yes");
showBtnApprove(btnBy, el)
} else {
// console.log("approve No");
showBtnBuy(btnBy, el);
}
}*/
let maxReg = el.dataset.maxReg;
let countOfReg = el.dataset.countOfReg;
let superuser = getSuperuser();
let approve = el.dataset.approve;
let waitlist = el.dataset.waitlist;
let sessionId = el.dataset.sid;
console.log('maxReg', maxReg);
console.log('countOfReg', countOfReg);
console.log('superuser', superuser);
console.log('approve', approve);
console.log('waitlist', waitlist);
console.log('sessionId', sessionId);
if ((parseInt(maxReg) != "NaN" && parseInt(countOfReg) < parseInt(maxReg)) || maxReg.length == 0) {
console.log('superuser != "1"', superuser != "1")
console.log('isPurchased(sessionId)', isPurchased(sessionId))
if (isPurchased(sessionId) && superuser != "1") {
console.log("purchased");
showBtnPurchased(btnBy);
} else {
console.log("not purchased, needs approve?");
if (approve !== "No" && waitlist !== "Yes") {
console.log("approve Yes and waitlist No");
showBtnApprove(btnBy, el)
} else {
console.log("approve No");
showBtnBuy(btnBy, el);
}
}
}else{
if (isPurchased(sessionId) && superuser != "1") {
console.log("purchased");
showBtnPurchased(btnBy);
} else {
if (approve !== "No" && waitlist !== "Yes") {
console.log("approve Yes and waitlist No");
showBtnApprove(btnBy, el)
} else if (approve !== "No" && waitlist == "Yes") {
console.log("approve Yes and waitlist Yes");
showBtnApprove(btnBy, el)
} else {
console.log("approve No");
showBtnCompleted(btnBuy);
}
}
}
}
}
var nextProductIdIndex = 0;
var nextFormId = '';
var nextProductIds = [];
var onSuccessAddToCartProgram = function() {
if (nextProductIds.length > 0) {
var form = $('#' + nextFormId);
var url = form.attr('action');
let lastProductId = nextProductIds[nextProductIds.length - 1];
let nextProductIdsSize = nextProductIds.length;
for (let i = 1; i < nextProductIds.length; i ++){
let nextProductId = nextProductIds[i]
setTimeout(function(){
var data = new FormData(document.getElementById(nextFormId));
if ($(form).find('[type="file"]').length > 0) {
jQuery.each($(form).find('[type="file"]')[0].files, function (i, file) {
data.append($(this).attr("name"), file);
});
}
var data1 = new FormData();
for (var pair of data.entries()) {
if (pair[0] != 'productId')
data1.append(pair[0], pair[1]);
}
data1.append('productId', nextProductId);
$.ajax({
type: "POST",
url: url,
data: data1, // serializes the form's elements.
processData: false,
contentType: false,
success: function(data) {
if (data['success'] != false) {
console.log('success with ', nextProductId);
} else {
}
if ((i + 1) == nextProductIdsSize){
$.get("/shoppingCart2/getCartContent.ajax", function(cart) {updateCount(cart)});
}
}
});
}, i*250)
}
}
nextProductIds = [];
onSuccessAddToCart();
}
var addToShoppingCart2Program = function(productIds){
console.log('addToShoppingCart2Program')
nextProductIds = productIds;
if (productIds.length > 0){
let productId = productIds[0];
var formId = 'editAjaxForm_' + productId;
nextFormId = formId;
$("div#productAddToCartModal").find("div[rel='product-form']").
load('/shoppingCart2/addToCart.html?productId=' + productId + '&no_add_to_cart=true');
addToCartInModalButtonClick = function () {
window['mySubmit_' + formId]('onSuccessAddToCartProgram');
}
$("div#productAddToCartModal").modal('show');
}
/*setTimeout(function () {
let sessionId = item.querySelector("ul.list li.selected").dataset.sid;
if (!isPurchased(sessionId)){
let productId = item.querySelector("ul.list li.selected").dataset.value;
addToShoppingCart2(productId, 1, 'true');
}
}, index * 250);*/
}
function ajaxLoadSessionsCatalogElement(entity, onSuccess) {
/*Sessions Roster List*/
let xmlhttpSessionsRoster = new XMLHttpRequest();
xmlhttpSessionsRoster.overrideMimeType('text/xml');
xmlhttpSessionsRoster.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
let sessionsHtmlList = new DOMParser().parseFromString(this.responseText, 'text/html');
let boxParent = document.querySelector("#catalog-item-"+entity);
let sessionsRosterOptions = document.querySelector('[role="entity-options-' + entity + '"]');
let sessionsRosterList = document.querySelector('[role="entity-list-' + entity + '"] ul.list');
let sessionsRosterListCurrent = document.querySelector('[role="entity-list-' + entity + '"] span.current');
if (boxParent == null){
return;
}
let btnBy = boxParent.querySelector(".btn2");
let btnFavorite = boxParent.querySelector("a.favorite");
let iFavorite = btnFavorite.querySelector("i");
let currentSet = false;
sessionsHtmlList.querySelectorAll('body [role="list-view"]').forEach(function (el, index) {
if (el.textContent.trim().length > 0) {// session
let maxReg = el.dataset.maxreg;
let countOfReg = el.dataset.totalregistered;
let idProduct = el.dataset.pid;
console.log('idProduct:', idProduct)
let idSession = el.dataset.sid;
let approve = el.dataset.approve;
let waitlist = el.dataset.waitlist;
let superuser = getSuperuser();
let newOption = document.createElement("option");
let newLi = document.createElement("li");
newOption.value = el.textContent;
newLi.classList.add("option");
newLi.dataset.value = idSession;
newLi.dataset.sid = idSession;
newLi.dataset.approve = approve;
newLi.dataset.waitlist = waitlist;
newLi.dataset.maxReg = maxReg;
newLi.dataset.countOfReg = countOfReg;
if (!!idProduct) {
newLi.dataset.value = idProduct;
}
newOption.textContent = el.textContent;
newLi.textContent = el.textContent;
if((parseInt(maxReg) != "NaN" && parseInt(countOfReg) < parseInt(maxReg)) || maxReg.length == 0){
sessionsRosterOptions.appendChild(newOption);
sessionsRosterList.appendChild(newLi);
if (!currentSet) {
sessionsRosterListCurrent.textContent = el.textContent;
newLi.classList.add("selected");
currentSet = true;
}
}
}
})
if(btnBy)
if (sessionsRosterList.childElementCount == 0) {
showBtnNoSession(btnBy, sessionsRosterList)
} else {
showButton(btnBy, sessionsRosterList.querySelector("li.selected"))
}
if (btnFavorite.dataset.value > 0) {
if (favoriteArray.includes(btnFavorite.dataset.value)) {
btnFavorite.classList.add("active");
iFavorite.classList.add("fas");
}
btnFavorite.addEventListener('click', event => {
event.preventDefault()
let favorite = localStorage.getItem('favorite') ? JSON.parse(localStorage.getItem('favorite')) : [];
if (!favorite.includes(btnFavorite.dataset.value)) {
favoriteArray.push(btnFavorite.dataset.value);
localStorage.setItem('favorite', JSON.stringify(favoriteArray));
btnFavorite.classList.add("active");
iFavorite.classList.add("fas");
} else {
let fList = localStorage.getItem('favorite') ? JSON.parse(localStorage.getItem('favorite')) : [];
let result = arrayRemove(fList, btnFavorite.dataset.value);
localStorage.setItem('favorite', JSON.stringify(result));
btnFavorite.classList.remove("active");
iFavorite.classList.remove("fas");
}
})
}
onSuccess();
}
}
xmlhttpSessionsRoster.open("GET", "/entity/roster/entityRosterView.html?entityRosterId=2&no_header=true&entityInstanceForm.parentEntityInstanceId=" + entity, true);
xmlhttpSessionsRoster.send();
}
function showBtnBuyProgram(catalogItems) {
/*if(catalogItems.length !== 0){
const div = document.createElement("div");
const txtBuy = document.createElement("div");
const a = document.createElement("a");
a.classList.add("btn2");
a.innerHTML = " Ajouter au panier ";
div.id = "addAllSessions";
div.classList.add("col-md-12");
div.appendChild(txtBuy);
div.appendChild(a);
fetch('/site/portal/lms/program-buy?no_header=true')
.then(response => response.text())
.then(result => {
let dom = new DOMParser().parseFromString(result, 'text/html');
txtBuy.innerHTML = dom.querySelector("#content").innerHTML;
});
if (!document.querySelector("#addAllSessions")) {
a.addEventListener('click', (event) => {
event.preventDefault();
let productIds = [];
catalogItems.forEach((item, index) => {
console.log(item.querySelector("ul.list li.selected"))
let sessionId = item.querySelector("ul.list li.selected").dataset.sid;
if (!isPurchased(sessionId)){
let productId = item.querySelector("ul.list li.selected").dataset.value;
productIds.push(productId);
}
})
addToShoppingCart2Program(productIds);
})
document.querySelector("#rosterRecords").append(div);
}
}*/
}
window.addEventListener('DOMContentLoaded', (event) => {
const ajaxBtnLoadMore = document.querySelector("span#ajax_load_button_more");
const ajaxSpinnerLoad = document.querySelector("span#ajax_load_indicator_more");
const formFilter = document.querySelector("form#command");
const numberFieldList = document.querySelectorAll("form#command [type='number']")
const checkboxFieldList = document.querySelectorAll("form#command [type='checkbox']:not([name='entityInstanceForm.instanceFilter.v[592856]'])")
const programFieldsList = formFilter.querySelectorAll("input[name='entityInstanceForm.instanceFilter.v[592856]']");
const catalogItems = document.querySelectorAll("div[role='catalog-item']");
totalLoadedRecords = document.querySelectorAll("div[role='catalog-item']").length;
/**num elems pagination**/
let str = document.querySelector(".pagebanner").textContent;
let r = /\d+/;
str = parseInt(str.match(r));
if (!isNaN(str)){
let elemc = document.querySelector("#el-count-page");
if (elemc !== null)
elemc.textContent = str;
}
/**end num elems pagination**/
// custom submit up form
// entityInstanceForm_term_up
document.querySelector('#up_form').addEventListener('submit', function(_event){
console.log("try to submit entityInstanceForm_term_up");
_event.preventDefault();
document.querySelectorAll("input[id='entityInstanceForm_term_up']").forEach((item, index) => {
console.log('entityInstanceForm_term_up = ' + item.value);
document.querySelectorAll("input[id='entityInstanceForm_term_down']").forEach((item2, index) => {
item2.value = item.value;
})
})
document.querySelectorAll("div[role='catalog-item']").forEach((item, index) => {
item.remove();
})
programFieldsList.forEach(element => {
element.checked = false;
});
loadNextPageObj.next_page=1;
totalLoadedRecords = 0;
loadNextPage(ajaxBtnLoadMore,ajaxSpinnerLoad);
if(event.target.checked){
if(ajaxBtnLoadMore.style.display == "none")
ajaxBtnLoadMore.style.display = "none";
}
return false;
});
document.querySelectorAll(".pagebanner").forEach(el => {
console.log(el);
el.closest("div.col-md-12").style.display = "none";
})
checkboxFieldList.forEach(element => {
element.addEventListener('change', (event) => {
//counterStart(formFilter, element);
//console.log("change checkbox")
document.querySelectorAll("input[id='entityInstanceForm_term_up']").forEach((item, index) => {
console.log('entityInstanceForm_term_up = ' + item.value);
document.querySelectorAll("input[id='entityInstanceForm_term_down']").forEach((item2, index) => {
item2.value = item.value;
})
})
document.querySelectorAll("div[role='catalog-item']").forEach((item, index) => {
item.remove();
})
programFieldsList.forEach(element => {
element.checked = false;
});
loadNextPageObj.next_page=1;
totalLoadedRecords = 0;
loadNextPage(ajaxBtnLoadMore,ajaxSpinnerLoad);
if(event.target.checked){
if(ajaxBtnLoadMore.style.display == "none")
ajaxBtnLoadMore.style.display = "none";
}
})
});
programFieldsList.forEach(element => {
element.addEventListener('change', (event) => {
//counterStart(formFilter, element);
//console.log("change checkbox")
document.querySelectorAll("div[role='catalog-item']").forEach((item, index) => {
item.remove();
})
checkboxFieldList.forEach(element => {
element.checked = false;
});
loadNextPageObj.next_page=1;
totalLoadedRecords = 0;
loadNextPage(ajaxBtnLoadMore,ajaxSpinnerLoad);
if(event.target.checked){
if(ajaxBtnLoadMore.style.display == "none")
ajaxBtnLoadMore.style.display = "none";
}
})
});
numberFieldList.forEach(element => {
element.addEventListener("focus", () => {
//clearInterval(timer)
loadNextPage(ajaxLoadMore,ajaxLoaderMore);
}, true);
element.addEventListener('input', () => {
//counterStart(formFilter, element)
loadNextPage(ajaxLoadMore,ajaxLoaderMore);
});
});
let xmlhttpSessionsClientData = new XMLHttpRequest();
xmlhttpSessionsClientData.overrideMimeType('text/xml');
xmlhttpSessionsClientData.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
let sessionsHtmlList = new DOMParser().parseFromString(this.responseText, 'text/html');
sessionsHtmlList.querySelectorAll("body div[role='sdata']").forEach(el => {
sJson.push(JSON.parse(el.textContent));
console.log("sJson:" + el.textContent);
})
loadDataForNewPage(1);
}
}
xmlhttpSessionsClientData.open("GET", "/client/relation_roster/clientRelationRosterView.html?no_header=true&clientRelationRosterId=236", true);
xmlhttpSessionsClientData.send();
/**load more**/
/**add clear form**/
const inputBtn = document.createElement("input");
inputBtn.classList.add("btn","btn-primary", "btn-sm");
inputBtn.value = "Réinitialiser les filtres";
inputBtn.type = "submit";
inputBtn.style.display="block !important";
inputBtn.addEventListener('click', (event) => {
clearFormVisible(formFilter)
})
const div = document.createElement("div");
div.classList.add("row");
div.classList.add("mb-2");
div.append(inputBtn);
let s = document.querySelector("#entityInstanceForm-entity div.card-body");
s.prepend(div);
/**end add clear form**/
var loadNextPage1 = (button,loader) => {
// prevent double loading
loadNextPage = (button,loader) => {};
let element = document.createElement('div');
element.style.cssText = 'display:block; position: fixed; top: 0px; width:100%; height:100%; opacity:0.3; z-index:10000; background:#000;';
document.body.append(element);
// console.log(element);
let btnAddProgramToCart = document.querySelector("#addAllSessions");
if (btnAddProgramToCart != null)
btnAddProgramToCart.remove();
let formAfterLoad4 = document.querySelector("form[rel='entityRosterForm-4']");
let ajaxLoadContainer = document.querySelector("div[rel='ajax_load_button_container-4']");
let dataRoster = document.querySelector('div[data-roster="entityRoster-4"]');
loader.style.display = 'block';
button.style.display = 'none';
let xhr = new XMLHttpRequest();
let fd = new FormData();
if (formAfterLoad4 != null) {
fd = new FormData(formAfterLoad4);
}
fd.append("entityRosterId", 4);
fd.set("page", loadNextPageObj.next_page);
console.log("page" + loadNextPageObj.next_page)
xhr.addEventListener("load", e => {
var div = document.createElement('div');
div.innerHTML = e.target.responseText.trim();
let loadedItemsDOM = new DOMParser().parseFromString( e.target.responseText, 'text/html');
if (loadedItemsDOM.querySelector("div[name='entityRosterId_4']") != null){
totalRecords = loadedItemsDOM.querySelector("div[name='entityRosterId_4']").dataset.totalrecords;
/**records**/
let elemc = document.querySelector("#el-count-page");
if (elemc !== null)
elemc.textContent = totalRecords;
// document.querySelector("#el-count-page").textContent = totalRecords;
dataRoster.insertBefore(div.firstChild, ajaxLoadContainer);
console.log("totalLoadedRecordsOld = " + totalLoadedRecords)
totalLoadedRecords += parseInt(loadedItemsDOM.querySelector("div[name='entityRosterId_4']").dataset.totalonpage);
// document.querySelectorAll("div[role='catalog-item']").length;
loadDataForNewPage(loadNextPageObj.next_page);
console.log("totalLoadedRecords = " + totalLoadedRecords, typeof totalLoadedRecords)
console.log("totalRecords = "+totalRecords, typeof totalRecords)
if (totalLoadedRecords < totalRecords) {
button.style.display = 'block';
}else {
button.style.display = 'none';
}
loader.style.display = 'none';
loadNextPageObj.next_page++;
loadNextPage = loadNextPage1;
element.remove();
const addrow = document.querySelector("div[name='entityRosterId_4']> div.col-xl-12");
addrow.classList.add("row", "catrow");
addrow.classList.remove("col-xl-12", "col-md-12", "col-sm-12");
addrow.setAttribute("style", "margin-left: 0;margin-right: 0;padding: unset;");
//const removerow = document.querySelector("div[name='entityRosterId_4']");
//removerow.classList.remove("row");
}
});
xhr.addEventListener("error", e => {
button.style.display = 'block';
loader.style.display = 'none';
});
xhr.open("POST", '/entity/roster/entityRosterView.ajax');
xhr.send(fd);
}
loadNextPage = loadNextPage1;
});