Brak zmian w kodzie.
This commit is contained in:
405
apilo-bck
405
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'] . "<br>";
|
||||
echo "SKU: " . $product['sku'] . "<br>";
|
||||
echo "EAN: " . $product['ean'] . "<br><hr>";
|
||||
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;
|
||||
}
|
||||
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');
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
611
apilo.js
611
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');
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
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');
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user