{% sw_extends '@Storefront/storefront/component/delivery-information.html.twig' %} {# -------------------- Kontext / Quellen -------------------- #} {% if page is defined and page.product is defined %} {% set product = page.product %} {% endif %} {% set p = product is defined ? product : (page is defined and page.product is defined ? page.product : null) %} {# dl von Page, LineItem oder Product #} {% set dl = null %} {% if page is defined and page.extensions is defined and page.extensions.dlDelivery is defined %} {% set dl = page.extensions.dlDelivery %} {% elseif lineItem is defined and lineItem.extensions is defined and lineItem.extensions.dlDelivery is defined %} {% set dl = lineItem.extensions.dlDelivery %} {% elseif p is not null and p.extensions is defined and p.extensions.dlDelivery is defined %} {% set dl = p.extensions.dlDelivery %} {% endif %} {# Fallbacks aus Produkt (falls keine Extension) #} {% set fbInfo = p and p.customFields is defined ? (p.customFields.dl_delivery_days ?? null) : null %} {% set fbStock = p and p.stock is defined ? p.stock : 0 %} {% set fbMin = p and p.minPurchase is defined ? p.minPurchase : 1 %} {% set fbAvail = p and p.availableStock is defined ? p.availableStock : fbStock %} {% set fbClose = p and p.isCloseout is defined ? p.isCloseout : false %} {% set fbDtName = p and p.deliveryTime is defined ? p.deliveryTime.translation('name') : null %} {# -------------------- Effektiver Bestand (serverseitig wie in PHP) -------------------- #} {% set myIsCloseout = dl and dl.isCloseout is defined ? dl.isCloseout : fbClose %} {% set dlAvail = dl and dl.availableStock is defined ? dl.availableStock : fbAvail %} {% set dlStock = dl and dl.instock is defined ? dl.instock : fbStock %} {# effective stock: - Closeout: negativen Bestand ignorieren (clamp to 0) - sonst: falls availableStock < 0, den verwenden; sonst stock #} {% set myinstock = myIsCloseout ? (dlStock > 0 ? dlStock : 0) : (dlAvail is not null and dlAvail < 0 ? dlAvail : dlStock) %} {# Text, wenn on-hand > 0 und DeliveryTime vorhanden #} {% set deliveryTimeName = (p and p.deliveryTime is defined and myinstock > 0) ? p.deliveryTime.translation('name') : null %} {# -------------------- Macro: Wrapper + initialer Text -------------------- #} {% macro render(info, instock, min, state, days, availableStock, isCloseout, deliveryTimeName) %}

{% if state == 'available' %} {% sw_icon "checkmark" %} {{ "dl.delivery.available"|trans }} {% if deliveryTimeName %} {{ "detail.deliveryTimeAvailable"|trans({'%name%': deliveryTimeName})|sw_sanitize }} {% endif %} {% elseif state == 'partially' %} {% sw_icon "alert" %} {{ "dl.delivery.partlyAvailable"|trans|replace({"[delivery_days]": days}) }} {% elseif state == 'notDeliverable' %} {% sw_icon "x-circle" %} {{ "dl.delivery.notDeliverable"|trans }} {% else %} {% sw_icon "x-circle" %} {{ "dl.delivery.notAvailable"|trans }} {% endif %}

{% endmacro %} {% import _self as dlm %} {# -------------------- Blocks: überall die neuen Macro-Parameter befüllen -------------------- #} {% block component_delivery_information_available %} {% if dl %} {{ dlm.render( dl.info, myinstock, dl.minPurchase, dl.state, dl.days, dl.availableStock ?? fbAvail, myIsCloseout, deliveryTimeName) }} {% elseif fbInfo is not null %} {{ dlm.render(fbInfo, fbStock, fbMin, 'available', 0, fbAvail, fbClose, fbDtName) }} {% else %} {{ parent() }} {% endif %} {% endblock %} {% block component_delivery_information_not_available %} {% if dl %} {{ dlm.render( dl.info, myinstock, dl.minPurchase, 'available', (dl.state == 'partially' ? dl.days : 0), dl.availableStock ?? fbAvail, myIsCloseout, deliveryTimeName) }} {% elseif fbInfo is not null %} {{ dlm.render(fbInfo, fbStock, fbMin, 'available', 0, fbAvail, fbClose, fbDtName) }} {% else %} {{ parent() }} {% endif %} {% endblock %} {% block component_delivery_information_pre_order %} {{ parent() }} {% endblock %} {% block component_delivery_information_restock %} {% if dl %} {{ dlm.render(dl.info, 0, dl.minPurchase, 'partially', dl.days, dl.availableStock ?? fbAvail, myIsCloseout, deliveryTimeName) }} {% else %} {{ parent() }} {% endif %} {% endblock %} {% block component_delivery_information_soldout %} {% if dl %} {% set state = dl.state == 'notDeliverable' ? 'notDeliverable' : 'notAvailable' %} {{ dlm.render(dl.info, myinstock, dl.minPurchase, state, null, dl.availableStock ?? fbAvail, myIsCloseout, deliveryTimeName) }} {% elseif fbInfo is not null %} {{ dlm.render(fbInfo, fbStock, fbMin, 'notAvailable', null, fbAvail, fbClose, fbDtName) }} {% else %} {{ parent() }} {% endif %} {% endblock %} {% block component_delivery_information_default %} {% if dl %} {{ dlm.render( dl.info, myinstock, dl.minPurchase, dl.state, dl.days, dl.availableStock ?? fbAvail, myIsCloseout, deliveryTimeName) }} {% elseif fbInfo is not null %} {{ dlm.render(fbInfo, fbStock, fbMin, 'available', 0, fbAvail, fbClose, fbDtName) }} {% else %} {{ parent() }} {% endif %} {% endblock %}