Nový Občanský zákoník - Práva z vadného plnění

Předpis č. 89/2012 Sb.

Vyhlášené znění

89/2012 Sb. Zákon občanský zákoník

Práva z vadného plnění

§ 2099

(1) Věc je vadná, nemá-li vlastnosti stanovené v § 2095 a 2096. Za vadu se považuje i plnění jiné věci. Za vadu se považují i vady v dokladech nutných pro užívání věci.

(2) Plyne-li z prohlášení prodávajícího nebo z dokladu o předání, že prodávající dodal menší množství věcí, nevztahují se na chybějící věci ustanovení o vadách.

§ 2100

(1) Právo kupujícího z vadného plnění zakládá vada, kterou má věc při přechodu nebezpečí škody na kupujícího, byť se projeví až později. Právo kupujícího založí i později vzniklá vada, kterou prodávající způsobil porušením své povinnosti.

(2) Povinnosti prodávajícího ze záruky za jakost tím nejsou dotčeny.

§ 2101

(1) Při předčasném plnění může prodávající odstranit vady do doby určené pro odevzdání věci. Výkonem svého práva nesmí kupujícímu způsobit nepřiměřené obtíže nebo výdaje. Právo kupujícího na náhradu škody tím není dotčeno.

(2) Odstavec 1 platí obdobně i pro vady dokladů.

§ 2102

(1) Práva kupujícího z vadného plnění nejsou dotčena, způsobilo-li vadu použití věci, kterou kupující předal prodávajícímu. To neplatí, prokáže-li prodávající, že na nevhodnost předané věci kupujícího včas upozornil a kupující na jejím použití trval, nebo prokáže-li, že nevhodnost předané věci ani při vynaložení dostatečné péče nemohl zjistit.

(2) Způsobil-li vadu věci postup prodávajícího podle návrhů, vzorků nebo podkladů, které mu kupující opatřil, použije se odstavec 1 obdobně.

§ 2103

Kupující nemá práva z vadného plnění, jedná-li se o vadu, kterou musel s vynaložením obvyklé pozornosti poznat již při uzavření smlouvy. To neplatí, ujistil-li ho prodávající výslovně, že věc je bez vad, anebo zastřel-li vadu lstivě.

§ 2104

Kupující věc podle možnosti prohlédne co nejdříve po přechodu nebezpečí škody na věci a přesvědčí se o jejích vlastnostech a množství.

§ 2105

(1) Odesílá-li prodávající věc, může kupující odložit prohlídku do doby, kdy je věc dopravena do místa určení.

(2) Je-li věc během přepravy směrována do jiného místa určení, anebo kupujícím dále odeslána, aniž měl možnost věc prohlédnout, a prodávající v době uzavření smlouvy věděl nebo musel vědět o možnosti takové změny místa určení nebo takového dalšího odeslání, může kupující prohlídku odložit do doby, kdy je věc dopravena do nového místa určení.

§ 2106

(1) Je-li vadné plnění podstatným porušením smlouvy, má kupující právo

a) na odstranění vady dodáním nové věci bez vady nebo dodáním chybějící věci,

b) na odstranění vady opravou věci,

c) na přiměřenou slevu z kupní ceny, nebo

d) odstoupit od smlouvy.

(2) Kupující sdělí prodávajícímu, jaké právo si zvolil, při oznámení vady, nebo bez zbytečného odkladu po oznámení vady. Provedenou volbu nemůže kupující změnit bez souhlasu prodávajícího; to neplatí, žádal-li kupující opravu vady, která se ukáže jako neopravitelná. Neodstraní-li prodávající vady v přiměřené lhůtě či oznámí-li kupujícímu, že vady neodstraní, může kupující požadovat místo odstranění vady přiměřenou slevu z kupní ceny, nebo může od smlouvy odstoupit.

(3) Nezvolí-li kupující své právo včas, má práva podle § 2107.

§ 2107

(1) Je-li vadné plnění nepodstatným porušením smlouvy, má kupující právo na odstranění vady, anebo na přiměřenou slevu z kupní ceny.

(2) Dokud kupující neuplatní právo na slevu z kupní ceny nebo neodstoupí od smlouvy, může prodávající dodat to, co chybí, nebo odstranit právní vadu. Jiné vady může prodávající odstranit podle své volby opravou věci nebo dodáním nové věci; volba nesmí kupujícímu způsobit nepřiměřené náklady.

(3) Neodstraní-li prodávající vadu věci včas nebo vadu věci odmítne odstranit, může kupující požadovat slevu z kupní ceny, anebo může od smlouvy odstoupit. Provedenou volbu nemůže kupující změnit bez souhlasu prodávajícího.

§ 2108

Do odstranění vady nemusí kupující platit část kupní ceny odhadem přiměřeně odpovídající jeho právu na slevu.

§ 2109

Při dodání nové věci vrátí kupující prodávajícímu na jeho náklady věc původně dodanou.

§ 2110

Kupující nemůže odstoupit od smlouvy, ani požadovat dodání nové věci, nemůže-li věc vrátit v tom stavu, v jakém ji obdržel. To neplatí,

a) došlo-li ke změně stavu v důsledku prohlídky za účelem zjištění vady věci,

b) použil-li kupující věc ještě před objevením vady,

c) nezpůsobil-li kupující nemožnost vrácení věci v nezměněném stavu jednáním anebo opomenutím, nebo

d) prodal-li kupující věc ještě před objevením vady, spotřeboval-li ji, anebo pozměnil-li věc při obvyklém použití; stalo-li se tak jen zčásti, vrátí kupující prodávajícímu, co ještě vrátit může, a dá prodávajícímu náhradu do výše, v níž měl z použití věci prospěch.

§ 2111

Neoznámil-li kupující vadu věci včas, pozbývá právo odstoupit od smlouvy.

§ 2112

(1) Neoznámil-li kupující vadu bez zbytečného odkladu poté, co ji mohl při včasné prohlídce a dostatečné péči zjistit, soud mu právo z vadného plnění nepřizná. Jedná-li se o skrytou vadu, platí totéž, nebyla-li vada oznámena bez zbytečného odkladu poté, co ji kupující mohl při dostatečné péči zjistit, nejpozději však do dvou let po odevzdání věci.

(2) K účinkům podle odstavce 1 soud přihlédne jen k námitce prodávajícího, že vada nebyla včas oznámena. Prodávající však nemá právo na námitku, je-li vada důsledkem skutečnosti, o které prodávající v době odevzdání věci věděl nebo musel vědět.

Skrýt změny zákona Legenda text přidán text vypuštěn
Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).
'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); outstreamDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (direct) { adsRequest.adTagUrl = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * Handles the ad manager loading and sets ad event listeners. * @param { !google.ima.AdsManagerLoadedEvent } adsManagerLoadedEvent */ function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } /** * Handles actions taken in response to ad events. * @param { !google.ima.AdEvent } adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }
OSZAR »