Files
shopPRO/apilo.js

378 lines
12 KiB
JavaScript

const currentUrl = window.location.href;
const patterns = [
/^https:\/\/projectpro\.apilo\.com\/order\/order\/news\/?$/,
/^https:\/\/projectpro\.apilo\.com\/order\/order\/in-progress\/?$/,
/^https:\/\/projectpro\.apilo\.com\/order\/order\/to-send\/?$/,
/^https:\/\/projectpro\.apilo\.com\/order\/order\/completed\/?$/,
/^https:\/\/projectpro\.apilo\.com\/order\/order\/all\/?$/
];
if (patterns.some(pattern => pattern.test(currentUrl))) {
waitForTableAndSetImage();
attachTableReloadListener();
}
function waitForTableAndSetImage() {
const intervalId = setInterval(() => {
let dataTables_scrollBody = document.getElementsByClassName('dataTables_scrollBody');
if (dataTables_scrollBody.length > 0) {
let dataTables_tbody = dataTables_scrollBody[0].getElementsByTagName('tbody')[0];
let rows = dataTables_tbody.getElementsByTagName('tr');
if (rows.length > 0) {
clearInterval(intervalId);
setImageToProduct();
}
}
}, 100);
}
function attachTableReloadListener() {
const table = document.querySelector('.dataTables_scrollBody table');
if (table) {
const observer = new MutationObserver((mutationsList, observer) => {
for (const mutation of mutationsList) {
if (mutation.type === 'childList') {
waitForTableAndSetImage();
break;
}
}
});
observer.observe(table.querySelector('tbody'), { childList: true });
}
}
function setImageToProduct(img = '') {
let dataTables_scrollBody = document.getElementsByClassName('dataTables_scrollBody');
if (dataTables_scrollBody.length > 0) {
let dataTables_tbody = dataTables_scrollBody[0].getElementsByTagName('tbody')[0];
let rows = dataTables_tbody.getElementsByTagName('tr');
for (let i = 0; i < rows.length; i++) {
let cells = rows[i].getElementsByTagName('td');
if (cells.length > 1) {
let secondCellText = cells[1].textContent.trim();
let domain;
if (secondCellText.includes('marianek.pl')) {
domain = 'marianek.pl';
} else if (secondCellText.includes('pomysloweprezenty.pl')) {
domain = 'pomysloweprezenty.pl';
} else {
continue;
}
if (cells.length >= 5) {
let fifthCell = cells[4];
let divsInFifthCell = fifthCell.children;
for (let i = 0; i < divsInFifthCell.length; i++) {
let currentDiv = divsInFifthCell[i];
let imgDiv = currentDiv.getElementsByTagName('div')[0];
let dataDiv = currentDiv.getElementsByTagName('div')[1];
if (dataDiv) {
let skuText = dataDiv.innerHTML.match(/SKU:\s*([A-Za-z0-9-]+)/);
if (skuText && skuText[1]) {
getProductData(skuText[1], domain).then(data => {
if (!data) {
console.log('Product not found:', skuText[1]);
return;
}
console.log('Product found:', skuText[1]);
imgDiv.innerHTML = '';
const imgElement = makeImg(data);
imgDiv.appendChild(imgElement);
imgElement.addEventListener('mouseover', function() {
showLargeImage(data, imgElement);
});
imgElement.addEventListener('mouseout', function() {
hideLargeImage();
});
});
}
}
}
}
}
}
}
}
function makeImg(src = 'https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png') {
const img = document.createElement('img');
img.src = src;
img.alt = 'image';
img.className = 'img-fluid center-block';
img.style.maxWidth = '48px';
img.style.maxHeight = '48px';
return img;
}
function showLargeImage(src, imgElement) {
const largeImg = document.createElement('img');
largeImg.src = src;
largeImg.style.position = 'absolute';
largeImg.style.maxWidth = '400px';
largeImg.style.maxHeight = '400px';
largeImg.style.border = '1px solid #ccc';
largeImg.style.background = '#fff';
largeImg.style.zIndex = '1000';
largeImg.style.top = imgElement.getBoundingClientRect().top + window.scrollY + 'px';
largeImg.style.left = imgElement.getBoundingClientRect().left + imgElement.offsetWidth + 10 + 'px';
largeImg.id = 'largeImagePreview';
document.body.appendChild(largeImg);
}
function hideLargeImage() {
const largeImg = document.getElementById('largeImagePreview');
if (largeImg) {
largeImg.remove();
}
}
async function getProductData(sku, domain) {
let url;
if (domain === 'marianek.pl') {
url = `https://marianek.pl/api/v1/product.php?sku=${sku}`;
} else if (domain === 'pomysloweprezenty.pl') {
url = `https://pomysloweprezenty.pl/api/v1/product.php?sku=${sku}`;
} else {
console.error('Unsupported domain:', domain);
return null;
}
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json(); console.log(data);
return data.img;
} catch (error) {
console.error('Error fetching product data: ' + url, error);
return null;
}
}
const currentUrl2 = window.location.href;
const pattern = /^https:\/\/projectpro\.apilo\.com\/warehouse\/shipment\/new-for-order\/.+/;
if (pattern.test(currentUrl2)) {
const portletBody = document.querySelector('.kt-portlet__body');
if (portletBody) {
const buttonContainer = document.createElement('div');
buttonContainer.className = 'custom-button-container';
buttonContainer.style.display = 'flex';
buttonContainer.style.gap = '10px';
buttonContainer.style.marginBottom = '15px';
portletBody.parentNode.insertBefore(buttonContainer, portletBody);
const buttonP2D = createButton('Inpost P2D', '#007bff', 'P2D.inpost', 'RZE14N||RZE14N');
const buttonD2D = createButton('Inpost D2D', '#ff7800', 'D2D.inpostkurier');
const buttonD2P = createButton('Inpost D2P', '#28a745', 'D2P.inpost');
const buttonP2P = createButton('Inpost P2P', '#ffc107', 'P2P.inpost', 'RZE14N||RZE14N');
const buttonD2Dapaczka = createButton('D2D Apaczka', '#ff7800', 'D2D.apaczka');
buttonContainer.appendChild(buttonP2D);
buttonContainer.appendChild(buttonD2Dapaczka);
// buttonContainer.appendChild(buttonD2D);
buttonContainer.appendChild(buttonD2P);
buttonContainer.appendChild(buttonP2P);
}
}
function createButton(text, backgroundColor, method, dropoffPoint = null) {
const button = document.createElement('button');
button.textContent = text;
button.style.background = backgroundColor;
button.style.display = 'inline-flex';
button.style.width = '200px';
button.style.height = '40px';
button.style.alignItems = 'center';
button.style.justifyContent = 'center';
button.style.color = '#FFF';
button.style.border = 'none';
button.style.cursor = 'pointer';
button.addEventListener('click', () => handleShipment(method, dropoffPoint));
return button;
}
async function handleShipment(method, dropoffPoint = null) {
try {
await selectPackageType(method);
await setShipmentMethod(method);
if (dropoffPoint) {
await setDropoffPoint(dropoffPoint);
}
await setContent( method );
await setParcelWeight('1');
await submitShipment();
} catch (error) {
console.error('Wystąpił błąd: ', error);
}
}
function retryUntilSuccess(fn, interval = 1000, retries = 10) {
return new Promise((resolve, reject) => {
const attempt = async () => {
try {
const result = await fn();
resolve(result);
} catch (err) {
if (retries === 0) {
reject(err);
} else {
setTimeout(() => {
retries--;
attempt();
}, interval);
}
}
};
attempt();
});
}
function setContent( method ) {
if ( method == 'D2D.apaczka' ) {
return retryUntilSuccess(() => {
return new Promise((resolve, reject) => {
const selectElement = document.getElementById('warehousebundle_shipment_preferences_content');
selectElement.value = 'prezent';
const event = document.createEvent('HTMLEvents');
event.initEvent('change', true, false);
selectElement.dispatchEvent(event);
resolve();
});
});
}
}
function selectPackageType(method) {
return retryUntilSuccess(() => {
return new Promise((resolve, reject) => {
if ( method == 'D2D.apaczka' ) {
const selectElement = document.getElementById('warehousebundle_shipment_carrierAccount');
selectElement.value = 17;
const event = document.createEvent('HTMLEvents');
event.initEvent('change', true, false);
selectElement.dispatchEvent(event);
// settimeout
setTimeout(() => {
const selectElement2 = document.getElementById('warehousebundle_shipment_method');
selectElement2.value = 42;
const event2 = document.createEvent('HTMLEvents');
event2.initEvent('change', true, false);
selectElement2.dispatchEvent(event2);
// settimeout
setTimeout(() => {
const selectElement3 = document.getElementById('warehousebundle_shipment_preferences_packageType');
selectElement3.value = 'PACZKA';
const event3 = document.createEvent('HTMLEvents');
event3.initEvent('change', true, false);
selectElement3.dispatchEvent(event3);
resolve();
}, 1000);
}, 1000);
} else {
const selectElement = document.getElementById('warehousebundle_shipment_packageType');
if (selectElement) {
selectElement.value = 'package';
const event = document.createEvent('HTMLEvents');
event.initEvent('change', true, false);
selectElement.dispatchEvent(event);
resolve();
} else {
reject('Nie znaleziono elementu packageType');
}
}
});
});
}
function setShipmentMethod(method) {
if ( method == 'D2D.apaczka' ) {
return new Promise((resolve, reject) => {
resolve();
});
}
return retryUntilSuccess(() => {
return new Promise((resolve, reject) => {
const methodElement = document.getElementById('warehousebundle_shipment_method');
if (methodElement) {
methodElement.value = method;
const methodEvent = document.createEvent('HTMLEvents');
methodEvent.initEvent('change', true, false);
methodElement.dispatchEvent(methodEvent);
resolve();
} else {
reject('Nie znaleziono elementu shipment_method');
}
});
});
}
function setDropoffPoint(dropoffPoint) {
return retryUntilSuccess(() => {
return new Promise((resolve, reject) => {
const dropoffPointElement = document.getElementById('warehousebundle_shipment_preferences_dropoffPoint');
if (dropoffPointElement) {
dropoffPointElement.value = dropoffPoint;
const dropoffPointEvent = document.createEvent('HTMLEvents');
dropoffPointEvent.initEvent('change', true, false);
dropoffPointElement.dispatchEvent(dropoffPointEvent);
resolve();
} else {
reject('Nie znaleziono elementu dropoffPoint');
}
});
});
}
function setParcelWeight(weight) {
return retryUntilSuccess(() => {
return new Promise((resolve, reject) => {
const weightElement = document.getElementById('warehousebundle_shipment_shipmentParcels_0_weight');
if (weightElement) {
weightElement.value = weight;
const weightEvent = document.createEvent('HTMLEvents');
weightEvent.initEvent('change', true, false);
weightElement.dispatchEvent(weightEvent);
resolve();
} else {
reject('Nie znaleziono elementu shipmentParcels_0_weight');
}
});
});
}
function submitShipment() {
return retryUntilSuccess(() => {
return new Promise((resolve, reject) => {
const submitButton = document.getElementById('warehousebundle_shipment_buttons_submit');
if (submitButton) {
submitButton.click();
resolve();
} else {
reject('Nie znaleziono przycisku submit');
}
});
});
}