Files
Stiletto/snippets/get-display-discount.liquid
2025-11-12 18:26:25 +08:00

190 lines
7.5 KiB
Plaintext

{%- comment -%}
Pass in:
- product or variant
- format string, one of
- "sale_text"
- "percent_off"
- "minus_percent"
- "save_percent"
- "amount_off"
- "minus_amount"
- "save_amount"
{%- endcomment -%}
{%- assign varies = false -%}
{%- liquid
assign prod_price = prod.price
assign prod_compare_at_price = prod.compare_at_price
if variant
assign prod = variant
assign prod_price = variant.metafields.app--168074346497.auto_discounted_price.value | default: variant.price
assign prod_compare_at_price = variant.compare_at_price
if variant.metafields.app--168074346497.discount_type.value != nil and variant.metafields.app--168074346497.discount_type.value != "fixed" and prod.metafields.app--168074346497.discount_percentage.value > 0.01
assign deducted_percentage = 1.0 | minus: prod.metafields.app--168074346497.discount_percentage.value
if variant.metafields.app--168074346497.discount_percentage.value > 0.01
assign deducted_percentage = 1.0 | minus: variant.metafields.app--168074346497.discount_percentage.value
endif
assign prod_price = variant.price | divided_by: 100.0 | times: deducted_percentage | times: 100.0 | ceil
assign prod_compare_at_price = variant.price
if variant.compare_at_price > prod_compare_at_price
assign prod_compare_at_price = variant.compare_at_price
endif
endif
else
if prod.compare_at_price_varies or prod.price_varies
assign varies = true
assign amount_off_varies = true
assign smallest_amount_off = 0
assign largest_amount_off = 0
for variant in prod.variants
assign variant_price = variant.metafields.app--168074346497.auto_discounted_price.value | default: variant.price
assign variant_compare_at_price = variant.compare_at_price
if variant.metafields.app--168074346497.discount_type.value != nil and variant.metafields.app--168074346497.discount_type.value != "fixed" and prod.metafields.app--168074346497.discount_percentage.value > 0.01
assign deducted_percentage = 1.0 | minus: prod.metafields.app--168074346497.discount_percentage.value
if variant.metafields.app--168074346497.discount_percentage.value > 0.01
assign deducted_percentage = 1.0 | minus: variant.metafields.app--168074346497.discount_percentage.value
endif
assign variant_price = variant.price | divided_by: 100.0 | times: deducted_percentage | times: 100.0 | ceil
assign variant_compare_at_price = variant.price
if variant.compare_at_price > variant_compare_at_price
assign variant_compare_at_price = variant.compare_at_price
endif
endif
if variant_compare_at_price > variant_price
assign variant_amount_off = variant_compare_at_price | minus: variant_price
if smallest_amount_off == 0 or variant_amount_off < smallest_amount_off
assign smallest_amount_off = variant_amount_off
endif
if variant_amount_off > largest_amount_off
assign largest_amount_off = variant_amount_off
endif
endif
endfor
if smallest_amount_off == largest_amount_off
assign amount_off_varies = false
endif
endif
endif
-%}
{% comment %}
{% if variant %}
{% assign prod = variant %}
{% else %}
{%- if prod.compare_at_price_varies or prod.price_varies -%}
{%- assign varies = true -%}
{%- assign amount_off_varies = true -%}
{% comment %}
The price may vary but the amount off may be the same for each variant.
Here we check to see if the amount off for each variant is the same or different.
{% endcomment %}
{%- assign smallest_amount_off = 0 -%}
{%- assign largest_amount_off = 0 -%}
{%- for variant in prod.variants -%}
{%- if variant.compare_at_price > variant.price -%}
{%- assign variant_amount_off = variant.compare_at_price | minus: variant.price -%}
{%- if smallest_amount_off == 0 -%}
{%- assign smallest_amount_off = variant_amount_off -%}
{%- endif -%}
{%- if variant_amount_off > largest_amount_off -%}
{%- assign largest_amount_off = variant_amount_off -%}
{%- endif -%}
{%- if variant_amount_off < smallest_amount_off -%}
{%- assign smallest_amount_off = variant_amount_off -%}
{%- endif -%}
{%- endif -%}
{%- endfor -%}
{% comment %}
If the smallest amount off is equal to the largest amount then the discount does not vary
{% endcomment %}
{%- if smallest_amount_off == largest_amount_off -%}
{%- assign amount_off_varies = false -%}
{%- endif -%}
{%- endif -%}
{%- endif -%}
{% endcomment %}
{%- if format == 'sale_text' -%}
{%- if prod_compare_at_price > prod_price -%}
{{ 'products.product.on_sale' | t }}
{%- endif -%}
{%- else -%}
{%- assign is_percent_format = false -%}
{%- if format == 'percent_off' or format == 'minus_percent' or format == 'save_percent' -%}
{%- assign is_percent_format = true -%}
{%- endif -%}
{%- if varies -%}
{%- if is_percent_format -%}
{%- capture displayed_discount -%}
{%- render 'get-varied-percent-discount', prod: prod -%}
{%- endcapture -%}
{%- else -%}
{%- capture displayed_discount -%}
{%- render 'get-varied-amount-discount', prod: prod -%}
{%- endcapture -%}
{%- endif -%}
{%- else -%}
{%- if is_percent_format -%}
{%- capture displayed_discount -%}{%- render 'get-percent-discount', prod: prod -%}{%- endcapture -%}
{%- else -%}
{%- capture displayed_discount -%}{%- render 'get-amount-discount', prod: prod -%}{%- endcapture -%}
{%- endif -%}
{%- endif -%}
{% assign displayed_discount = displayed_discount | plus: 0 -%}
{%- unless is_percent_format %}
{% capture formatted_currency_discount %}{{ displayed_discount | money }}{% endcapture %}
{% endunless -%}
{%- if displayed_discount > 0 %}
{%- if format == 'percent_off' -%}
{% if amount_off_varies %}{{ 'products.product.on_sale_varied_prefix' | t }}{% endif %}
{{ 'products.product.on_sale_format_percent_off' | t: value: displayed_discount }}
{%- elsif format == 'minus_percent' -%}
{% if amount_off_varies %}{{ 'products.product.on_sale_varied_prefix' | t }}{% endif %}
{{ 'products.product.on_sale_format_minus_percent' | t: value: displayed_discount }}
{%- elsif format == 'save_percent' -%}
{% if amount_off_varies %}
{{ 'products.product.on_sale_format_save_percent_varied' | t: value: displayed_discount }}
{% else %}
{{ 'products.product.on_sale_format_save_percent' | t: value: displayed_discount }}
{% endif %}
{%- elsif format == 'amount_off' -%}
{% if amount_off_varies %}{{ 'products.product.on_sale_varied_prefix' | t }}{% endif %}
{{ 'products.product.on_sale_format_amount_off' | t: value: formatted_currency_discount }}
{%- elsif format == 'minus_amount' -%}
{% if amount_off_varies %}{{ 'products.product.on_sale_varied_prefix' | t }}{% endif %}
{{ 'products.product.on_sale_format_minus_amount' | t: value: formatted_currency_discount }}
{%- elsif format == 'save_amount' -%}
{% if amount_off_varies %}
{{ 'products.product.on_sale_format_save_amount_varied' | t: value: formatted_currency_discount }}
{% else %}
{{ 'products.product.on_sale_format_save_amount' | t: value: formatted_currency_discount }}
{% endif %}
{%- endif -%}
{% endif -%}
{%- endif -%}