Logo
od 8.00 do 16.00
info@pracovneodevykado.sk
0 ks
za 0,00 €
Vo vašom košíku zatiaľ nič nie je, poďme to zmeniť! ☺️
Potrebujete poradiť? Neváhajte nás kontaktovať.
Dopravu máte ZADARMO

Pánske tričká Malfini

Pánske tričká Malfini – kvalitné tričká na prácu, reklamu aj bežné nosenie

Štýlové a pohodlné tričká pre mužov
Značka Malfini prináša široký výber pánskych tričiek vhodných na každodenné nosenie, do práce aj ako súčasť firemného alebo tímového oblečenia. V ponuke nájdete modely s krátkym aj dlhým rukávom, tielka či tričká bez etikety – ideálne na potlač alebo výšivku.

Pracovné aj voľnočasové využitie
Pánske tričká Malfini sú vyrábané z príjemných materiálov ako 100 % bavlna, bavlna s elastanom alebo funkčné zmesi. Sú ideálne ako pracovné tričká pre remeselníkov, technikov, SBS aj ako súčasť reklamného oblečenia pre firmy.

Veľký výber strihov a farieb
Vyberiete si z rôznych strihov – klasických aj moderných (napr. slim fit či raglánových), dostupných v mnohých farbách a veľkostiach. V ponuke sú aj tričká z kolekcie Label Free alebo Malfini Premium® pre zákazníkov, ktorí preferujú exkluzívne spracovanie.

Potlač a výšivka od 10 ks
Všetky pánske tričká Malfini sú vhodné na branding. Radi vám zabezpečíme profesionálnu potlač alebo výšivku už od 10 kusov, ideálnu pre firmy, podujatia či pracovné kolektívy.

Objednajte online alebo navštívte našu predajňu v Poprade
Vyberte si spoľahlivé tričko, ktoré vám sadne. K dispozícii online alebo v našej predajni PRACOVNÉ ODEVY KADO v Poprade. Radi vám pomôžeme s výberom vhodného modelu aj úpravami na mieru.

Najpredávanejšie
1.
Tričko pánske Basic 129 MALFINI®
Tričko pánske Basic 129 MALFINI®
🚚 Malf dodanie 2-5 dní > 1000 ks
  • 🏬 skladom v predajni PP
cena od 4,28 €
cena od 3,48 € bez DPH
2.
RUPSA XAVER RFLX tričko s reflexným pásom
RUPSA XAVER RFLX tričko s reflexným pásom
🚚 CR/Dlt dodanie 3-10 dní > 1000 KS
  • 🏬 skladom v predajni PP
9,58 €
7,79 € bez DPH
3.
Bavlnené tričko TEESTA CERVA 160g
Bavlnené tričko TEESTA CERVA 160g
🚚 CR/Dlt dodanie 3-10 dní > 1000 KS
  • 🏬 skladom v predajni PP
Až 13 % zľava
cena od 3,62 €
cena od 2,94 € bez DPH
Zvolené parametre
Pohlavie
Pánske
Výrobca
MALFINI, a.s.
Zobrazujem 1-22 z 22
strana
z 1
  • Tričko pánske Classic New 132 MALFINI® - energetický štítok
Tričko pánske Classic New 132 MALFINI®
4 hodnotenie
Tričko pánske Single Jersey, 100 % bavlna (zloženie sa môže líšiť - farba 03 - 97 % bavlna, 3 % viskóza, farba 12 - 85 %...
cena od 3,84 €
/ ks
cena od 3,12 € bez DPH
cena od 3,84 €
/ ks
cena od 3,12 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • 🏬 skladom v predajni PP
  • Tričko pánske Basic 129 MALFINI® - energetický štítok
Tričko pánske Basic 129 MALFINI®
4 hodnotenie
Tričko pánske Single Jersey, 100 % bavlna (zloženie sa môže líšiť - farba 03 - 97 % bavlna, 3 % viskóza, farba 12 - 85 %...
cena od 4,28 €
/ ks
cena od 3,48 € bez DPH
cena od 4,28 €
/ ks
cena od 3,48 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Top pánsky Core 142 MALFINI® - energetický štítok
Top pánsky Core 142 MALFINI®
0 hodnotenie
Top pánsky Single Jersey, 100 % bavlna (farba 12 - zloženie sa môže líšiť – 85 % bavlna, 15 % viskóza) tub...
cena od 4,43 €
/ ks
cena od 3,60 € bez DPH
cena od 4,43 €
/ ks
cena od 3,60 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Top pánsky Breeze 820 MALFINI® - energetický štítok
Top pánsky Breeze 820 MALFINI®
0 hodnotenie
Top pánsky Interlokové pique, 100 % polyester rýchloschnúci materiál ideálne pre šport a po...
cena od 4,54 €
/ ks
cena od 3,69 € bez DPH
cena od 4,54 €
/ ks
cena od 3,69 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Tričko pánske Basic Recycled 829 MALFINI® - energetický štítok
Tričko pánske Basic Recycled 829 MALFINI®
0 hodnotenie
Tričko pánske Single Jersey, 70 % bavlna, 30 % (GRS) recyklovaná bavlna, silikonová úprava 30 % (GRS) certi...
cena od 4,83 €
/ ks
cena od 3,93 € bez DPH
cena od 4,83 €
/ ks
cena od 3,93 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Tričko pánske Slim Fit V-neck 146 MALFINI® - energetický štítok
Tričko pánske Slim Fit V-neck 146 MALFINI®
0 hodnotenie
Tričko pánske Single Jersey, 100 % bavlna (farba 12 - zloženie sa môže líšiť – 85 % bavlna, 15 % viskóza), silikónová úp...
cena od 5,57 €
/ ks
cena od 4,53 € bez DPH
cena od 5,57 €
/ ks
cena od 4,53 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Tričko pánske Viper 143 MALFINI® - energetický štítok
Tričko pánske Viper 143 MALFINI®
0 hodnotenie
Tričko pánske Single Jersey, 100 % bavlna (farba 12 - zloženie sa môže líšiť – 85 % bavlna, 15 % viskóza), silikónová úp...
cena od 6,72 €
/ ks
cena od 5,46 € bez DPH
cena od 6,72 €
/ ks
cena od 5,46 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Tričko pánske Fit-T LS 119 MALFINI® - energetický štítok
Tričko pánske Fit-T LS 119 MALFINI®
3 hodnotenie
Tričko pánske Single Jersey, 100 % bavlna (zloženie sa môže líšiť - farba 12 - 85 % bavlna, 15 % viskóza) p...
cena od 6,73 €
/ ks
cena od 5,47 € bez DPH
cena od 6,73 €
/ ks
cena od 5,47 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • ⚠️ Dopredaj
  • Tričko pánske Fusion 163 MALFINI® - energetický štítok
Tričko pánske Fusion 163 MALFINI®
0 hodnotenie
Tričko pánske Single Jersey, 65 % polyester, 35 % bavlna strih s bočnými švami priekrčník l...
cena od 6,80 €
/ ks
cena od 5,53 € bez DPH
cena od 6,80 €
/ ks
cena od 5,53 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Pánske športové tričko Fantasy 124 MALFINI® - energetický štítok
Pánske športové tričko Fantasy 124 MALFINI®
0 hodnotenie
Tričko pánske Interlokové pique, 100 % polyester rýchloschnúci materiál strih s bočnými šva...
cena od 6,99 €
/ ks
cena od 5,68 € bez DPH
cena od 6,99 €
/ ks
cena od 5,68 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Tričko pánske Resist R01 RIMECK® - energetický štítok
Tričko pánske Resist R01 RIMECK®
0 hodnotenie
Tričko pánske Single Jersey, 100 % predzrazená bavlna predzrazená bavlna odolná vyšším teplotám ...
cena od 7,20 €
/ ks
cena od 5,85 € bez DPH
cena od 7,20 €
/ ks
cena od 5,85 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Tričko pánske Chance (GRS) 810 MALFINI® - energetický štítok
Tričko pánske Chance (GRS) 810 MALFINI®
0 hodnotenie
Tričko pánske Interlokové pique, 100 % (GRS) recyklovaný micro polyester certifikovaný recyklovaný polyeste...
cena od 7,90 €
/ ks
cena od 6,42 € bez DPH
cena od 7,90 €
/ ks
cena od 6,42 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Tričko pánske Resist heavy R03 RIMECK® - energetický štítok
Tričko pánske Resist heavy R03 RIMECK®
1 hodnotenie
Tričko pánske Single Jersey, 100 % predzrazená bavlna predzrazená bavlna odolná vyšším teplotám ...
cena od 7,98 €
/ ks
cena od 6,49 € bez DPH
cena od 7,98 €
/ ks
cena od 6,49 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Tričko pánske Destiny 175 MALFINI® - energetický štítok
Tričko pánske Destiny 175 MALFINI®
1 hodnotenie
Tričko pánske Single Jersey, 95 % micro polyester, 5 % elastan hladký strečový rýchloschnúci materiál ...
cena od 8,39 €
/ ks
cena od 6,82 € bez DPH
cena od 8,39 €
/ ks
cena od 6,82 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Tričko pánske Action 150 MALFINI Premium® - energetický štítok
Tričko pánske Action 150 MALFINI Premium®
1 hodnotenie
Tričko pánske Single Jersey, 95 % bavlna, 5 % elastan strečový materiál udržujúci stálosť tvaru ...
cena od 9,05 €
/ ks
cena od 7,36 € bez DPH
cena od 9,05 €
/ ks
cena od 7,36 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Tričko pánske Action V-neck 700 MALFINI Premium® - energetický štítok
Tričko pánske Action V-neck 700 MALFINI Premium®
0 hodnotenie
Tričko pánske Single Jersey, 95 % bavlna, 5 % elastan strečový materiál udržiavajúci stálosť tvaru ...
9,05 €
/ ks
7,36 € bez DPH
9,05 €
/ ks
7,36 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Tričko pánske Native (GOTS) 173 MALFINI® - energetický štítok
Tričko pánske Native (GOTS) 173 MALFINI®
0 hodnotenie
Tričko pánske Single Jersey Slub, 100 % organická bavlna GOTS bez etikety - pripravené na rebranding ...
cena od 9,96 €
/ ks
cena od 8,10 € bez DPH
cena od 9,96 €
/ ks
cena od 8,10 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Tričko pánske Brave 155 MALFINI Premium® - energetický štítok
Tričko pánske Brave 155 MALFINI Premium®
0 hodnotenie
Tričko pánske Single Jersey, 95 % bavlna 5 % Elastan strečový materiál udržujúci stálosť tvaru ...
cena od 10,05 €
/ ks
cena od 8,17 € bez DPH
cena od 10,05 €
/ ks
cena od 8,17 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Tričko pánske Origin (GOTS) 171 MALFINI® - energetický štítok
Tričko pánske Origin (GOTS) 171 MALFINI®
0 hodnotenie
Tričko pánske Single Jersey, 100 % organická bavlna GOTS certifikovaná organická bavlna str...
cena od 10,20 €
/ ks
cena od 8,29 € bez DPH
cena od 10,20 €
/ ks
cena od 8,29 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Tričko pánske Exclusive 153 MALFINI Premium® - energetický štítok
Tričko pánske Exclusive 153 MALFINI Premium®
0 hodnotenie
Tričko pánske Single Jersey, 100 % bavlna SUPIMA® najexkluzívnejšia bavlna SUPIMA® prilieha...
cena od 14,32 €
/ ks
cena od 11,64 € bez DPH
cena od 14,32 €
/ ks
cena od 11,64 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Tričko pánske Merino Rise 157 MALFINI Premium® - energetický štítok
Tričko pánske Merino Rise 157 MALFINI Premium®
0 hodnotenie
Tričko pánske Single Jersey, 100 % merino vlna, 17,5 µm, machine wash extra jemná merino vlna ...
cena od 51,84 €
/ ks
cena od 42,15 € bez DPH
cena od 51,84 €
/ ks
cena od 42,15 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
  • Tričko pánske Merino Rise LS 159 MALFINI Premium® - energetický štítok
Tričko pánske Merino Rise LS 159 MALFINI Premium®
0 hodnotenie
Tričko pánske Single Jersey, 100 % merino vlna, 17,5 µm, machine wash extra jemná merino vlna ...
cena od 54,54 €
/ ks
cena od 44,34 € bez DPH
cena od 54,54 €
/ ks
cena od 44,34 € bez DPH
🚚 Malf dodanie 2-5 dní > 1000 ks
strana
z 1

📘 Sprievodca výberom pracovných a voľnočasových tričiek

🔎 Materiál: Vyberte si medzi 100 % bavlnou (príjemný pocit), funkčnými zmesami (priedušnosť, odolnosť) a termo materiálmi (chladné prostredie).
💨 Priedušnosť: Pre aktívny pohyb a pohodlie preferujte tričká s vysokou priedušnosťou.
⚠️ Bezpečnosť: Reflexné a antistatické tričká pre náročné pracoviská.
🎨 Personalizácia: Využite potlač alebo výšivku pre jednotný tímový vzhľad.
👕 Strih a štýl: Klasické, moderné alebo športové tričká? Vyberte si, čo vám najlepšie sedí.

Potlač tričiek od 10 kusov

Pohlavie
Farba
Veľkosť
Výrobca
Značka
Gramáž
Prateľné na
Paropriepustnosť
Materiál
Novinky
19.11.2024
Prinášame nové značky
Prinášame Vám nové produkty obohatené o prestížne značky pracovných a voľnočasových odevov. V ponuke teraz nájdete svetové značky ako   ... čítať celé
01.05.2024
BOZP OZNAČENIA
V predajni nájdete BOZP označenia, tabuľky aj samolepky za skvelé ceny, s rôznymi nápismi ako Neparkovať, Hydrant, Vstup zakázaný, ... čítať celé
29.09.2024
Možnosť vyšívky mena na Rondon
Pridali sme možnosť objednania si vyšívky Mena a Priezviska kuchára ako samostatný produkt môžete objednať tu Vyšívka meno a priezvisko na Rondon. N... čítať celé
Zobraziť všetky novinky
NEPREHLIADNITE








 
Nepremeškajte novinky, akcie a zľavy!
Môžete sa kedykoľvek odhlásiť. Zasielame v priebehu prebiehajúcich akcií
CXS pracovné a voľnočasové oblečenie, obuv, rukaviceDELTAPLUS pracovné oblečenie, obuv, rukaviceMALFINI, RIMECK, PICCOLIO reklamný textil, pracovné a voľnočasové oblečenie,ARDON pracovné a voľnočasové oblečenie, obuv, rukavicePORTWEST pracovné a voľnočasové oblečenie, obuv, rukaviceCERVA pracovné a voľnočasové oblečenie, obuv, rukaviceVM FOOTWEAR pracovná a voľnočasová obuvBENNON pracovná a voľnočasová obuv, odevy rukaviceBAREA Slovenská pracovná, zdravotná a voľnočasová obuvPUMA SAFETY bezpečnostná značková obuvPANDA SAFETY - talianska pracovná obuvARTRA - slovenská pracovná obuv
Batz - maďarská zdravotná obuvBASE - Ortopedická pracovná obuv vyrobená v Taliansku

b-well palltex zdravotné oblečenieGiblor´s & rossini - talianske odevy Health&GastroIndustrial Starter - talianske pracovné odevy
boa - unikátny systém zapínania pomocou koliečkaMICHELIN - pracovná obuv s podrážkou MICHELIN3M dýchacia technika, ochrana sluchu, očí, hlavy,...DuPont Tyvek chemické obleky

FRUIT OF THE LOOM - reklamný textil

b&c voľnočasové a pracovné odevyKARIBAN - reklmaný textilJHK reklamný textil

a mnoho ďalších....

(function(){ if (window.KADO_BASKET_CLEAN_FINAL_V1 && window.KADO_BASKET_CLEAN_FINAL_V1.destroy) { window.KADO_BASKET_CLEAN_FINAL_V1.destroy(); } var API_BASE = "https://api.pracovneodevykado.com/product/stock/"; var detailCache = {}; var stockCache = {}; var timers = []; var listeners = []; var observers = []; var runToken = 0; function addListener(target, type, fn, opts){ target.addEventListener(type, fn, opts); listeners.push([target, type, fn, opts]); } function addTimer(fn, delay){ var t = setTimeout(fn, delay); timers.push(t); return t; } function destroy(){ timers.forEach(clearTimeout); timers = []; listeners.forEach(function(x){ x[0].removeEventListener(x[1], x[2], x[3]); }); listeners = []; observers.forEach(function(o){ try { o.disconnect(); } catch(e) {} }); observers = []; } window.KADO_BASKET_CLEAN_FINAL_V1 = { destroy: destroy }; function cleanText(s){ return (s || "") .replace(/\u00a0/g, " ") .replace(/\s+/g, " ") .trim(); } function norm(s){ return cleanText(s) .toLowerCase() .normalize("NFD") .replace(/[\u0300-\u036f]/g, "") .replace(/[^\w\s]/g, " ") .replace(/\s+/g, " ") .trim(); } function esc(s){ return String(s || "") .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """); } function isBasketPage(){ return location.href.indexOf("e-basket") !== -1 || document.querySelector('[data-selector="basket-item"]'); } function injectStyle(){ if (document.getElementById("kado-basket-clean-final-v1-style")) return; var style = document.createElement("style"); style.id = "kado-basket-clean-final-v1-style"; style.textContent = ` .kado-basket-stock-v4, .kado-basket-stock-v5-holder, .kado-basket-stock-v6-holder, .kado-basket-stock-v12-holder, .kado-order-delivery-summary-console, .kado-order-delivery-summary-v12, .kado-order-delivery-summary-v13 { display: none !important; } .c847.kado-basket-clean-source, .c847.in-stock.kado-basket-clean-source { display: none !important; } .kado-basket-clean-holder { display: block !important; } .kado-basket-clean-stock { display: block !important; max-width: 260px !important; font-size: 12.5px !important; line-height: 1.25 !important; font-weight: 800 !important; white-space: normal !important; text-align: left !important; } .kado-basket-clean-store { display: block !important; color: #15803d !important; white-space: normal !important; } .kado-basket-clean-external { display: block !important; color: #1d4ed8 !important; margin-top: 3px !important; white-space: normal !important; } .kado-basket-clean-dot { display: inline-block !important; width: 13px !important; height: 13px !important; border-radius: 50% !important; background: #22c55e !important; border: 1px solid #0f172a !important; margin-right: 6px !important; vertical-align: -2px !important; } .kado-basket-clean-summary { margin: 18px 0 14px 0 !important; padding: 12px 16px !important; border: 1px solid #bfdbfe !important; background: #eff6ff !important; color: #1e3a8a !important; border-radius: 12px !important; font-size: 14px !important; line-height: 1.35 !important; font-weight: 800 !important; max-width: 520px !important; box-sizing: border-box !important; } .kado-basket-clean-summary strong { font-weight: 900 !important; } @media (max-width: 768px) { .kado-basket-clean-stock { max-width: 100% !important; font-size: 12.5px !important; } .kado-basket-clean-summary { max-width: 100% !important; font-size: 13.5px !important; } } `; document.head.appendChild(style); } function cleanupOldBasketOutputs(){ document.querySelectorAll( ".kado-order-delivery-summary-console, " + ".kado-order-delivery-summary-v12, " + ".kado-order-delivery-summary-v13, " + ".kado-basket-stock-v4, " + ".kado-basket-stock-v5-holder, " + ".kado-basket-stock-v6-holder, " + ".kado-basket-stock-v12-holder" ).forEach(function(el){ el.remove(); }); document.querySelectorAll(".c847, .c847.in-stock").forEach(function(el){ el.classList.remove( "kado-basket-stock-v5-source", "kado-basket-stock-v6-source", "kado-basket-stock-v12-source", "kado-basket-stock-v4-finalized" ); }); } function getQtyInput(item){ return item.querySelector( '[data-selector="number-controller-input"], input[type="number"], input[name^="pocet"]' ); } function getQty(item){ var input = getQtyInput(item); if (!input) return 1; var val = parseInt(input.value || input.getAttribute("value") || "1", 10); return val > 0 ? val : 1; } function findItemFromSource(source){ var p = source; for (var i = 0; i < 10 && p; i++) { if ( p.querySelector && p.querySelector("a[href]") && p.querySelector("img") && getQtyInput(p) ) { return p; } p = p.parentElement; } return source.closest('[data-selector="basket-item"], .c1380, .c180, tr, li'); } function getProductLink(item){ var links = Array.from(item.querySelectorAll("a[href]")); var link = links.find(function(a){ var href = a.getAttribute("href") || ""; if (!href) return false; if (href.indexOf("javascript:") === 0) return false; if (href.indexOf("#") === 0) return false; if (href.indexOf("basket") !== -1) return false; if (href.indexOf("increase=") !== -1) return false; if (href.indexOf("decrease=") !== -1) return false; if (href.indexOf("remove") !== -1) return false; if (href.indexOf("oblub") !== -1) return false; return true; }); if (!link) return ""; try { return new URL(link.getAttribute("href"), location.origin).href; } catch(e) { return ""; } } function getProductTitle(item){ var links = Array.from(item.querySelectorAll("a[href]")); for (var i = 0; i < links.length; i++) { var text = cleanText(links[i].textContent || ""); var href = links[i].getAttribute("href") || ""; if (text && href && href.indexOf("basket") === -1 && href.indexOf("remove") === -1) { return text; } } var img = item.querySelector("img[alt]"); if (img && cleanText(img.getAttribute("alt"))) { return cleanText(img.getAttribute("alt")); } return cleanText(item.textContent || "").slice(0, 120); } function getRows(){ var sources = Array.from(document.querySelectorAll(".c847.in-stock, .c847")).filter(function(source){ if (source.closest(".kado-basket-clean-holder")) return false; var text = cleanText(source.textContent || ""); if (!text) return false; return /skladom|extern|dodanie|ks|kus|pár|par|PW|Malf|CR\/Dlt|Dlt/i.test(text); }); var rows = []; var seen = new Set(); sources.forEach(function(source){ var item = findItemFromSource(source); if (!item) return; if (seen.has(item)) return; if (!getProductLink(item)) return; if (!getQtyInput(item)) return; seen.add(item); rows.push({ item: item, source: source }); }); return rows; } function normalizeUnit(unit){ unit = cleanText(unit || "").toLowerCase(); if (/pár|par|párov|parov/.test(unit)) return "pár"; return "ks"; } function detectUnitFromText(text){ return /pár|par|PÁR|PAR/.test(text || "") ? "pár" : "ks"; } function parseDays(text){ text = cleanText(text); var m = text.match(/(?:do\s*)?([0-9]+)\s*[–-]\s*([0-9]+)\s*dni/i); if (!m) return null; var min = Number(m[1]); var max = Number(m[2]); if (!min || !max) return null; return { min: min, max: max, label: min + "-" + max + " dní" }; } function parseExternalFromText(text){ text = cleanText(text); var days = parseDays(text); var qty = 0; var unit = detectUnitFromText(text); var isMoreThan = false; var moreMatch = text.match(/>\s*([0-9]+)\s*(ks|kus|KS|KUS|pár|par|PÁR|PAR)/i); if (moreMatch && moreMatch[1]) { qty = Number(moreMatch[1]) || 0; unit = normalizeUnit(moreMatch[2]); isMoreThan = true; } else { var matches = Array.from(text.matchAll(/([0-9]+)\s*(ks|kus|KS|KUS|pár|par|PÁR|PAR)/gi)); if (matches.length) { var last = matches[matches.length - 1]; qty = Number(last[1]) || 0; unit = normalizeUnit(last[2]); } } return { qty: qty, unit: unit, days: days, isMoreThan: isMoreThan }; } function parseStoreFromText(text){ text = cleanText(text); var m = text.match(/Skladom\s*:\s*([0-9]+)\s*ks/i); if (m && m[1]) return Number(m[1]) || 0; return /Skladom/i.test(text) ? null : 0; } function extractCodeFromHtml(html){ var doc = new DOMParser().parseFromString(html, "text/html"); var sku = doc.querySelector(".kado-product-code-top__code") || doc.querySelector('[itemprop="sku"]') || doc.querySelector('[data-product-code]'); if (sku) { var val = sku.getAttribute("content") || sku.getAttribute("data-product-code") || sku.textContent; if (cleanText(val)) { return cleanText(val).replace(/[.,;:]$/g, ""); } } var text = cleanText(doc.body ? doc.body.innerText : html); var m = text.match(/Kód produktu\s*:\s*([A-Za-z0-9_\-\/.]+)/i) || text.match(/Kod produktu\s*:\s*([A-Za-z0-9_\-\/.]+)/i); return m && m[1] ? cleanText(m[1]).replace(/[.,;:]$/g, "") : ""; } function parseExternalFromDocument(doc){ var texts = []; var preferred = [ doc.querySelector(".c755.stock .c757.in-stock"), doc.querySelector(".c755.stock .c757"), doc.querySelector(".kado-external-stock-box") ].filter(Boolean); preferred.forEach(function(el){ texts.push(cleanText(el.textContent || "")); }); Array.from(doc.querySelectorAll("body *:not(script):not(style)")).forEach(function(el){ var text = cleanText(el.textContent || ""); if (!text) return; if (text.length > 1000) return; if ( /dodanie/i.test(text) && /([0-9]+\s*[–-]\s*[0-9]+\s*dni)/i.test(text) && /(?:>\s*[0-9]+|[0-9]+\s*(ks|kus|KS|KUS|pár|par|PÁR|PAR))/i.test(text) ) { texts.push(text); } }); texts = texts .filter(Boolean) .sort(function(a, b){ return a.length - b.length; }); for (var i = 0; i < texts.length; i++) { var parsed = parseExternalFromText(texts[i]); if (parsed.qty > 0 || parsed.days) { return parsed; } } return { qty: 0, unit: "ks", days: null, isMoreThan: false }; } function loadDetailData(url){ if (!url) { return Promise.resolve({ code: "", external: { qty: 0, unit: "ks", days: null } }); } if (detailCache[url]) return detailCache[url]; detailCache[url] = fetch(url, { method: "GET", credentials: "same-origin", cache: "no-store" }) .then(function(response){ if (!response.ok) throw new Error("Detail HTTP " + response.status); return response.text(); }) .then(function(html){ var doc = new DOMParser().parseFromString(html, "text/html"); return { code: extractCodeFromHtml(html), external: parseExternalFromDocument(doc) }; }) .catch(function(){ return { code: "", external: { qty: 0, unit: "ks", days: null } }; }); return detailCache[url]; } function loadStock(code){ if (!code) return Promise.resolve(null); if (stockCache[code]) return stockCache[code]; stockCache[code] = fetch(API_BASE + encodeURIComponent(code), { method: "GET", cache: "no-store", mode: "cors" }) .then(function(response){ if (!response.ok) throw new Error("Stock HTTP " + response.status); return response.json(); }) .catch(function(){ return null; }); return stockCache[code]; } function storeDelivery(){ return { min: 1, max: 3, label: "1-3 dní" }; } function fallbackExternalDelivery(){ return { min: 3, max: 10, label: "3-10 dní" }; } function buildStockHtml(qty, storeStock, externalQty, externalUnit, externalDays){ qty = Math.max(1, Number(qty || 1)); storeStock = Math.max(0, Number(storeStock || 0)); externalQty = Math.max(0, Number(externalQty || 0)); var days = externalDays || fallbackExternalDelivery(); var unit = externalUnit || "ks"; var html = ''; if (storeStock > 0) { var storePart = Math.min(qty, storeStock); var needExternal = Math.max(0, qty - storePart); if (needExternal <= 0) { html += '' + 'Skladom' + ''; html += ''; return html; } html += '' + 'Skladom: ' + storePart + ' ks' + ''; if (externalQty > 0) { var extPart = Math.min(needExternal, externalQty); html += '🚚 Externý sklad: ' + extPart + ' ' + esc(unit) + ' (' + esc(days.label) + ')'; } html += ''; return html; } if (externalQty > 0) { var extOnly = Math.min(qty, externalQty); html += '🚚 Externý sklad: ' + extOnly + ' ' + esc(unit) + ' (' + esc(days.label) + ')'; html += ''; return html; } html += ''; return html; } function renderRow(row, html){ if (!html) return; var source = row.source; if (!source || !source.parentNode) return; source.classList.add("kado-basket-clean-source"); var holder = source.parentNode.querySelector(".kado-basket-clean-holder"); if (!holder) { holder = document.createElement("div"); holder.className = "kado-basket-clean-holder"; source.parentNode.insertBefore(holder, source.nextSibling); } if (holder.dataset.kadoHtml === html) return; holder.innerHTML = html; holder.dataset.kadoHtml = html; } function findCouponBlock(){ var candidates = Array.from(document.querySelectorAll("label, div, p, span")).filter(function(el){ if (el.closest(".kado-basket-clean-summary")) return false; var text = norm(el.textContent || ""); return text.indexOf("mam zlavovy kupon") !== -1 && text.length < 140; }); if (!candidates.length) return null; candidates.sort(function(a, b){ return (a.textContent || "").length - (b.textContent || "").length; }); var el = candidates[0]; var p = el; for (var i = 0; i < 5 && p; i++) { var text = norm(p.textContent || ""); if ( text.indexOf("mam zlavovy kupon") !== -1 && p.querySelector && p.querySelector('input[type="checkbox"]') ) { return p; } p = p.parentElement; } return el.closest("label, div, p") || el; } function renderSummary(longest){ if (!longest || !longest.label) return; var box = document.querySelector(".kado-basket-clean-summary"); if (!box) { box = document.createElement("div"); box.className = "kado-basket-clean-summary"; } box.innerHTML = "Dodanie objednávky: " + esc(longest.label); var coupon = findCouponBlock(); if (coupon && coupon.parentNode) { coupon.parentNode.insertBefore(box, coupon); } else { var rows = getRows(); if (rows.length) { var last = rows[rows.length - 1].item; if (last && last.parentNode) { last.parentNode.insertBefore(box, last.nextSibling); } } } try { localStorage.setItem("kado_order_delivery_term", "Dodanie objednávky: " + longest.label); } catch(e) {} } function setDeliveryNoteIfExists(longest){ if (!longest || !longest.label) return; var wanted = "Dodanie objednávky: " + longest.label; var fields = Array.from(document.querySelectorAll( 'textarea, input[type="text"], input:not([type])' )); var field = fields.find(function(f){ var attrs = norm([ f.name || "", f.id || "", f.getAttribute("placeholder") || "", f.getAttribute("aria-label") || "", f.getAttribute("data-name") || "" ].join(" ")); return attrs.indexOf("termin dodania") !== -1 || (attrs.indexOf("termin") !== -1 && attrs.indexOf("dodania") !== -1); }); if (!field) return; if (field.value !== wanted) { field.value = wanted; field.dispatchEvent(new Event("input", { bubbles: true })); field.dispatchEvent(new Event("change", { bubbles: true })); if (window.jQuery) { try { window.jQuery(field).val(wanted).trigger("input").trigger("change"); } catch(e) {} } } } function chooseLongest(daysList){ var list = daysList.filter(Boolean); if (!list.length) return null; list.sort(function(a, b){ if (a.max !== b.max) return a.max - b.max; return a.min - b.min; }); return list[list.length - 1]; } function processRow(row, index, token){ var item = row.item; var source = row.source; if (!source.dataset.kadoOriginalCleanText) { source.dataset.kadoOriginalCleanText = cleanText(source.textContent || ""); } var originalText = source.dataset.kadoOriginalCleanText || cleanText(source.textContent || ""); var sourceExternal = parseExternalFromText(originalText); var sourceStore = parseStoreFromText(originalText); var qty = getQty(item); var url = getProductLink(item); var title = getProductTitle(item); return loadDetailData(url).then(function(detail){ if (token !== runToken) return null; var code = detail.code || ""; return loadStock(code).then(function(stockData){ if (token !== runToken) return null; var apiStore = Number( stockData && typeof stockData.oberonStock !== "undefined" ? stockData.oberonStock : 0 ); var apiSupplier = Number( stockData && typeof stockData.supplierStock !== "undefined" ? stockData.supplierStock : 0 ); var detailExternal = detail.external || { qty: 0, unit: "ks", days: null }; var storeStock = apiStore > 0 ? apiStore : sourceStore !== null ? sourceStore : 0; var externalQty = Number(detailExternal.qty || 0) > 0 ? Number(detailExternal.qty || 0) : Number(sourceExternal.qty || 0) > 0 ? Number(sourceExternal.qty || 0) : apiSupplier > 0 ? apiSupplier : 0; var externalUnit = detailExternal.unit || sourceExternal.unit || detectUnitFromText(originalText) || "ks"; var externalDays = detailExternal.days || sourceExternal.days || null; if (externalQty > 0 && !externalDays) { externalDays = fallbackExternalDelivery(); } var html = buildStockHtml( qty, storeStock, externalQty, externalUnit, externalDays ); renderRow(row, html); var storePart = Math.min(qty, Math.max(0, storeStock)); var needExternal = Math.max(0, qty - storePart); var usedDelivery = needExternal > 0 ? (externalDays || fallbackExternalDelivery()) : storeDelivery(); return { index: index, title: title, qty: qty, code: code, storeStock: storeStock, externalQty: externalQty, externalDays: externalDays ? externalDays.label : "", usedDelivery: usedDelivery.label }; }); }); } function run(){ if (!isBasketPage()) return; injectStyle(); cleanupOldBasketOutputs(); runToken++; var token = runToken; var rows = getRows(); if (!rows.length) return; Promise.all(rows.map(function(row, index){ return processRow(row, index, token); })).then(function(results){ if (token !== runToken) return; results = results.filter(Boolean); var longest = chooseLongest(results.map(function(r){ if (!r || !r.usedDelivery) return null; return parseDays(r.usedDelivery) || storeDelivery(); })); renderSummary(longest); setDeliveryNoteIfExists(longest); console.log("KADO KOŠÍK CLEAN FINAL:", results); }); } function scheduleRun(){ addTimer(run, 100); addTimer(run, 400); addTimer(run, 900); addTimer(run, 1600); } var scheduleTimer = null; function scheduleSoftRun(){ clearTimeout(scheduleTimer); scheduleTimer = setTimeout(run, 220); } addListener(document, "input", function(e){ if (e.target && e.target.matches('[data-selector="number-controller-input"], input[type="number"], input[name^="pocet"]')) { scheduleRun(); } }, true); addListener(document, "change", function(e){ if (e.target && e.target.matches('[data-selector="number-controller-input"], input[type="number"], input[name^="pocet"]')) { scheduleRun(); } }, true); addListener(document, "click", function(e){ if ( e.target.closest('[data-selector="number-controller-minus"]') || e.target.closest('[data-selector="number-controller-plus"]') || e.target.closest(".c327") || e.target.closest(".c1348") ) { scheduleRun(); } }, true); var observer = new MutationObserver(function(){ scheduleSoftRun(); }); observer.observe(document.body, { childList: true, subtree: true, characterData: true }); observers.push(observer); scheduleRun(); })();
Obrázky sú ilustračné. Dodávateľ si vyhradzuje právo na typografické chyby. www.pracovneodevykado.sk © 2025, Všetky práva vyhradené.