const currentUrl = window.location.href.split('#')[0]; // odcinamy część z hash 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))) { console.log('test'); waitForTableAndSetImage(); attachTableReloadListener(); } else { console.log('Nie pasuje do żadnego wzorca URL'); } 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'); const buttonD2PApaczka = createButton('D2P Apaczka', '#28a745', 'D2P.apaczka'); const buttonP2Papaczka = createButton('P2P Apaczka', '#ffc107', 'P2P.apaczka'); const buttonOrlen = createButton('Orlen', 'rgb(255, 7, 193)', 'P2P.orlen'); // buttonContainer.appendChild(buttonP2D); buttonContainer.appendChild(buttonD2Dapaczka); buttonContainer.appendChild(buttonD2PApaczka); buttonContainer.appendChild(buttonP2Papaczka); buttonContainer.appendChild(buttonOrlen); // 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' || method == 'D2P.apaczka' || method == 'P2P.apaczka' || method == 'P2P.orlen' ) { 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 == 'P2P.orlen' ) { //warehousebundle_shipment_carrierAccount 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 = 50; 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 if ( method == 'D2P.apaczka' || method == 'P2P.apaczka' ) { //warehousebundle_shipment_carrierAccount 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 = 41; 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 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' || method == 'D2P.apaczka' || method == 'P2P.apaczka' || method == 'P2P.orlen' ) { 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'); } }); }); }