diff --git a/apilo-bck b/apilo-bck
index 384e57d..d31c03f 100644
--- a/apilo-bck
+++ b/apilo-bck
@@ -1,130 +1,339 @@
- static public function apilo_product_search()
- {
- global $mdb, $settings, $config;
- $sku = $mdb -> get( 'pp_shop_products', 'sku', [ 'id' => \S::get( 'product_id' ) ] );
- $ean = $mdb -> get( 'pp_shop_products', 'ean', [ 'id' => \S::get( 'product_id' ) ] );
- if ( !$sku and !$ean )
- {
- echo json_encode( [ 'status' => 'error', 'msg' => 'Podany produkt nie posiada kodu SKU ani EAN.' ] );
- exit;
- }
- $url = "https://projectpro.apilo.com/rest/api/warehouse/product/";
-$params = [];
-if ($sku) {
- $params['sku'] = $sku;
+
+
+
+
+
+
+
+
+const currentUrl = window.location.href;
+console.log(currentUrl);
+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();
}
-// if ($ean) {
-// $params['ean'] = $ean;
-// }
-$url .= '?' . http_build_query($params);
+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');
-$ch = curl_init($url);
-curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($ch, CURLOPT_HTTPHEADER, [
- "Authorization: Bearer " . $config['apilo']['access-token'],
- "Accept: application/json"
-]);
+ if (rows.length > 0) {
+ clearInterval(intervalId);
+ setImageToProduct();
+ }
+ }
+ }, 100);
+}
-$response = curl_exec($ch);
-$responseData = json_decode($response, true);
-
-if (curl_errno($ch)) {
- echo 'Błąd cURL: ' . curl_error($ch);
-} else {
- if ($responseData && isset($responseData['products'])) {
- foreach ($responseData['products'] as $product) {
- echo "Nazwa produktu: " . $product['name'] . "
";
- echo "SKU: " . $product['sku'] . "
";
- echo "EAN: " . $product['ean'] . "
";
+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;
}
- } else {
- echo "Brak wyników dla podanego SKU lub EAN.";
- }
+ }
+ });
+
+ observer.observe(table.querySelector('tbody'), { childList: true });
+ }
}
-curl_close($ch);
-exit;
+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');
- // $refreshUrl = "https://projectpro.apilo.com/rest/auth/token/?grant_type=refresh_token&refresh_token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9qZWN0cHJvLmFwaWxvLmNvbSIsImV4cCI6MTcwNDA2NDE3MywianRpIjoiZTJjZDI4MWItZmU3NS01YTIyLWI4MGYtM2MyNTI3MmViZjVjIiwidHlwZSI6InJlZnJlc2hfdG9rZW4iLCJjbGllbnRfaWQiOjIsInBsYXRmb3JtX2lkIjoyLCJpYXQiOjE2OTg3OTM3NzN9.QUXHq9_9ERSrTqtbx50ZE_h_uN32ai112k-JqmSD9TZg4RsJxyzA13PeIulAWVa2ZeEJolvB-X2XyU7Ok__dhRYtNEUs-2HQgoa9sX1LAUlnUyABkY5hXOMpRNztrZ_BJMl_Ttj4GkwEOGlP8Ze0JNXaqmio0d1Bbbc6DtYfzHtkqgzl_mImIBtIXmBpypP3nVgz9GtKq9eOxfczQsWsUv5OBmCBDSF3O6yJA9r7jLOgSo1_MOH1MYai6xd_23FFlTcOvQUUwmnI6EMe3ytIpfuegEPuhXMPY8FCa0tWGhuBx2jtPBzQRQdJW7dzk3rEQX495lhE3cwK_T0PPjDBJ6HaYUoA5sTiF-9S1JfysS5D-Jd7z-m2KNVW8FPz1Zz200U2k2wfAs64NT9NeDPVkEcBJ5GFmOFvCGw4ywosWuQVQx0YxfzF65becLKxddPRS1MC9_-NxxL4ergClbPA2_e2Qwkg2EXWhil6cAwGy2G7C80t2NGN5aP1UL_uH2FQZ8VBdW_R5KvAXZDJsWSJqvn7pinLqTollMoMipbyQA02jaUvIk7senIF-h3f4DHbj90I97dekyzUUcbppKVhBfF6ZsfeFUojbT-GUapjakOwz3uL2dNEXOENUQMn3bsnQmkQABsGQrhQZjnPc-mdEm0PJJz0rK8QdZ2cQHYgo4g";
+ for (let i = 0; i < rows.length; i++) {
+ let cells = rows[i].getElementsByTagName('td');
- // $ch = curl_init($refreshUrl);
- // curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- // curl_setopt($ch, CURLOPT_HTTPHEADER, [
- // "Authorization: Basic " . base64_encode($config['apilo']['client-id'] . ":" . $config['apilo']['client-secret']),
- // "Accept: application/json"
- // ]);
+ if (cells.length > 1) {
+ let secondCellText = cells[1].textContent.trim();
+ let domain;
- // $refreshResponse = curl_exec($ch);
+ if (secondCellText.includes('marianek.pl')) {
+ domain = 'marianek.pl';
+ } else if (secondCellText.includes('pomysloweprezenty.pl')) {
+ domain = 'pomysloweprezenty.pl';
+ } else {
+ continue;
+ }
- // if (curl_errno($ch)) {
- // echo 'Błąd cURL: ' . curl_error($ch);
- // } else {
- // $newTokens = json_decode($refreshResponse, true);
- // echo "Nowy access token: " . $newTokens['accessToken'];
+ if (cells.length >= 5) {
+ let fifthCell = cells[4];
+ let divsInFifthCell = fifthCell.children;
- // // Zapisz nowy access token i refresh token w sesji lub bazie danych
- // // $_SESSION['accessToken'] = $newTokens['accessToken'];
- // // $_SESSION['refreshToken'] = $newTokens['refreshToken'];
- // }
+ for (let i = 0; i < divsInFifthCell.length; i++) {
+ let currentDiv = divsInFifthCell[i];
+ let imgDiv = currentDiv.getElementsByTagName('div')[0];
+ let dataDiv = currentDiv.getElementsByTagName('div')[1];
- // curl_close($ch);
- // exit;
+ if (dataDiv) {
+ let skuText = dataDiv.innerHTML.match(/SKU:\s*([A-Za-z0-9-]+)/);
- // $url = "https://projectpro.apilo.com/rest/auth/token/?grant_type=authorization_code&code=" . $config['apilo']['authorization-code'];
+ if (skuText && skuText[1]) {
+ getProductData(skuText[1], domain).then(data => {
+ if (!data) {
+ console.log('Product not found:', skuText[1]);
+ return;
+ }
- // $ch = curl_init( $url );
- // curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
- // curl_setopt( $ch, CURLOPT_HTTPHEADER, [
- // "Authorization: Basic " . base64_encode( $config['apilo']['client-id'] . ":" . $config['apilo']['client-secret'] ),
- // "Accept: application/json"
- // ] );
+ console.log('Product found:', skuText[1]);
+ imgDiv.innerHTML = '';
+ const imgElement = makeImg(data);
+ imgDiv.appendChild(imgElement);
- // $response = curl_exec($ch);
+ imgElement.addEventListener('mouseover', function() {
+ showLargeImage(data, imgElement);
+ });
- // if( curl_errno( $ch ) ) {
- // echo 'Błąd cURL: ' . curl_error( $ch );
- // } else {
- // echo $response;
- // }
+ imgElement.addEventListener('mouseout', function() {
+ hideLargeImage();
+ });
+ });
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
- // curl_close( $ch );
+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';
- // $data = json_decode($response, true);
+ return img;
+}
- // $currentDateTime = new DateTime();
- // $tokenExpiryDateTime = DateTime::createFromFormat( DateTime::ATOM, $data['accessTokenExpireAt']);
+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';
- // // Sprawdzamy czy accessToken wygasł
- // if ( $tokenExpiryDateTime <= $currentDateTime) {
- // // Token wygasł, odświeżamy go używając refreshToken
- // // $refreshUrl = "https://projectpro.apilo.com/rest/auth/token/?grant_type=refresh_token&refresh_token=" . $data['refreshToken'];
+ document.body.appendChild(largeImg);
+}
- // // curl_setopt( $ch, CURLOPT_URL, $refreshUrl );
- // // curl_setopt( $ch, CURLOPT_HTTPHEADER, [
- // // "Authorization: Basic " . base64_encode( $config['apilo']['client-id'] . ":" . $config['apilo']['client-secret'] ),
- // // "Accept: application/json"
- // // ] );
+function hideLargeImage() {
+ const largeImg = document.getElementById('largeImagePreview');
+ if (largeImg) {
+ largeImg.remove();
+ }
+}
- // // $refreshResponse = curl_exec($ch);
+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;
+ }
- // // if (curl_errno($ch)) {
- // // echo 'Błąd cURL podczas odświeżania: ' . curl_error($ch);
- // // exit;
- // // }
+ try {
+ const response = await fetch(url);
+ if (!response.ok) {
+ throw new Error(`HTTP error! status: ${response.status}`);
+ }
- // // $refreshedData = json_decode($refreshResponse, true);
- // echo "Odświeżony token: " . $refreshedData['accessToken'];
- // } else {
- // echo "Token jest ważny.";
- // }
+ const data = await response.json(); console.log(data);
+ return data.img;
+ } catch (error) {
+ console.error('Error fetching product data: ' + url, error);
+ return null;
+ }
+}
- // curl_close($ch);
-exit;
- }
\ No newline at end of file
+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');
+
+ buttonContainer.appendChild(buttonP2D);
+ 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();
+ await setShipmentMethod(method);
+ if (dropoffPoint) {
+ await setDropoffPoint(dropoffPoint);
+ }
+ await setParcelWeight('1');
+ await submitShipment();
+ } catch (error) {
+ console.error('Wystąpił błąd: ', error);
+ }
+}
+
+function retryUntilSuccess(fn, interval = 500, 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 selectPackageType() {
+ return retryUntilSuccess(() => {
+ return new Promise((resolve, reject) => {
+ 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) {
+ 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');
+ }
+ });
+ });
+}
\ No newline at end of file
diff --git a/apilo.js b/apilo.js
index ab274e2..d31c03f 100644
--- a/apilo.js
+++ b/apilo.js
@@ -1,336 +1,339 @@
-// ==UserScript==
-// @name A
-// @version 1
-// @grant none
-// ==/UserScript==
- 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();
+
+
+
+
+
+
+
+
+
+
+
+
+const currentUrl = window.location.href;
+console.log(currentUrl);
+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 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');
+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');
- if (rows.length > 0) {
- clearInterval(intervalId); // Zatrzymanie dalszego wykonywania setInterval
- setImageToProduct();
+ 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();
+ });
+ });
}
- }
- }, 100); // Sprawdza co 100ms, można dostosować czas
- }
-
- function attachTableReloadListener() {
- const table = document.querySelector('.dataTables_scrollBody table');
- if (table) {
- // Tworzymy obserwatora zmian w DOM
- const observer = new MutationObserver((mutationsList, observer) => {
- for (const mutation of mutationsList) {
- if (mutation.type === 'childList') {
- // Wykonaj kod po zmianie w tabeli (dodanie/usunięcie wierszy)
- console.log('Table content changed');
- waitForTableAndSetImage();
- break; // Zatrzymujemy iterację po pierwszej znalezionej zmianie
+ }
}
}
- });
-
- // Konfiguracja obserwatora do nasłuchiwania zmian w zawartości tabeli
- 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');
+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';
- for (let i = 0; i < rows.length; i++) {
- let cells = rows[i].getElementsByTagName('td');
+ return img;
+}
- if (cells.length > 1) {
- let secondCellText = cells[1].textContent.trim();
- let domain;
+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';
- if (secondCellText.includes('marianek.pl')) {
- domain = 'marianek.pl';
- } else if (secondCellText.includes('pomysloweprezenty.pl')) {
- domain = 'pomysloweprezenty.pl';
- } else {
- continue;
- }
+ document.body.appendChild(largeImg);
+}
- if (cells.length >= 5) {
- let fifthCell = cells[4];
- let divsInFifthCell = fifthCell.children;
+function hideLargeImage() {
+ const largeImg = document.getElementById('largeImagePreview');
+ if (largeImg) {
+ largeImg.remove();
+ }
+}
- for (let i = 0; i < divsInFifthCell.length; i++) {
- let currentDiv = divsInFifthCell[i];
- let imgDiv = currentDiv.getElementsByTagName('div')[0];
- let dataDiv = currentDiv.getElementsByTagName('div')[1];
+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;
+ }
- if (dataDiv) {
- let skuText = dataDiv.innerHTML.match(/SKU:\s*([A-Za-z0-9-]+)/);
+ try {
+ const response = await fetch(url);
+ if (!response.ok) {
+ throw new Error(`HTTP error! status: ${response.status}`);
+ }
- if (skuText && skuText[1]) {
- getProductData(skuText[1], domain).then(data => {
- if (!data) {
- console.log('Product not found:', skuText[1]);
- return;
- }
+ const data = await response.json(); console.log(data);
+ return data.img;
+ } catch (error) {
+ console.error('Error fetching product data: ' + url, error);
+ return null;
+ }
+}
- console.log('Product found:', skuText[1]);
- imgDiv.innerHTML = '';
- const imgElement = makeImg(data);
- imgDiv.appendChild(imgElement);
+const currentUrl2 = window.location.href;
+const pattern = /^https:\/\/projectpro\.apilo\.com\/warehouse\/shipment\/new-for-order\/.+/;
- // Dodanie eventu na hover
- imgElement.addEventListener('mouseover', function() {
- showLargeImage(data, imgElement);
- });
+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);
- imgElement.addEventListener('mouseout', function() {
- hideLargeImage();
- });
- });
- }
- }
- }
- }
- }
- }
+ 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');
+
+ buttonContainer.appendChild(buttonP2D);
+ 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();
+ await setShipmentMethod(method);
+ if (dropoffPoint) {
+ await setDropoffPoint(dropoffPoint);
+ }
+ await setParcelWeight('1');
+ await submitShipment();
+ } catch (error) {
+ console.error('Wystąpił błąd: ', error);
+ }
+}
+
+function retryUntilSuccess(fn, interval = 500, 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 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}`;
+function selectPackageType() {
+ return retryUntilSuccess(() => {
+ return new Promise((resolve, reject) => {
+ 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 {
- console.error('Unsupported domain:', domain);
- return null;
+ reject('Nie znaleziono elementu packageType');
}
+ });
+ });
+}
- 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;
+function setShipmentMethod(method) {
+ 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');
}
- }
+ });
+ });
+}
- 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');
-
- buttonContainer.appendChild(buttonP2D);
- buttonContainer.appendChild(buttonD2D);
- buttonContainer.appendChild(buttonD2P);
- buttonContainer.appendChild(buttonP2P);
+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 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();
- await setShipmentMethod(method);
- if (dropoffPoint) {
- await setDropoffPoint(dropoffPoint);
- }
- await setParcelWeight('1');
- await submitShipment();
- } catch (error) {
- console.error('Wystąpił błąd: ', error);
+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 retryUntilSuccess(fn, interval = 500, 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 selectPackageType() {
- return retryUntilSuccess(() => {
- return new Promise((resolve, reject) => {
- 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) {
- 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');
- }
- });
- });
- }
\ No newline at end of file
+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');
+ }
+ });
+ });
+}
\ No newline at end of file