fix: drop redundant blue state-notice on offer page; default 48h → 72h
Two cleanups:
1. The orphaned blue "Waiting on the other party to respond" stripe
(alert-info-bg) appeared between the offer header and the
"Waiting on the other party · They have in X to respond" well
below — identical copy, twice. Same pattern as the previously
removed green "Offer accepted" banner. Dropping both the can_act
("It's your turn — accept, counter, or decline below") and
is_open branches of the state-notice. The "Your turn" section
heading and the waiting well right below already carry the
message, with the live countdown that the alert lacked.
Kept: DECLINED, WITHDRAWN, EXPIRED, PAID — those have no
follow-on action block, so the alert is the only signal.
2. DEFAULT_OFFER_EXPIRATION_HOURS 48 → 72 (3 days). Fox: 48h still
too tight for sellers checking shop mail intermittently. 7 days
was too generous, 48 hours was on the strict side. 72 hours
covers a long weekend.
Per-shop overrides are unchanged — operators tweak
offer_expiration_hours via offer-settings on /s/<shop>/settings.
This commit is contained in:
parent
547cc14589
commit
5f735ee1d3
4 changed files with 9 additions and 11 deletions
|
|
@ -104,7 +104,7 @@ OFFER_EVENT_INT_TO_HUMAN = {
|
|||
|
||||
|
||||
# Defaults — shop settings override these per-shop.
|
||||
DEFAULT_OFFER_EXPIRATION_HOURS = 48 # 2 days, pre-acceptance window
|
||||
DEFAULT_OFFER_EXPIRATION_HOURS = 72 # 3 days, pre-acceptance window
|
||||
DEFAULT_OFFER_MAX_ROUNDS = 3
|
||||
DEFAULT_OFFER_AUTO_ACCEPT_PCT = 95
|
||||
DEFAULT_OFFER_AUTO_DECLINE_PCT = 50
|
||||
|
|
|
|||
|
|
@ -200,7 +200,7 @@ class Shop(RBase, Base):
|
|||
BigInteger, nullable=False, default=50, server_default="50"
|
||||
)
|
||||
offer_expiration_hours = Column(
|
||||
BigInteger, nullable=False, default=48, server_default="48"
|
||||
BigInteger, nullable=False, default=72, server_default="72"
|
||||
)
|
||||
offer_max_rounds = Column(
|
||||
BigInteger, nullable=False, default=3, server_default="3"
|
||||
|
|
|
|||
|
|
@ -44,15 +44,13 @@
|
|||
<div class="alert alert-success offer-state-notice" name="alert">
|
||||
<p class="alert-message">Paid — this offer is complete.</p>
|
||||
</div>
|
||||
{% elif can_act %}
|
||||
<div class="alert alert-info offer-state-notice" name="alert">
|
||||
<p class="alert-message">It's your turn — accept, counter, or decline below.</p>
|
||||
</div>
|
||||
{% elif is_open %}
|
||||
<div class="alert alert-info offer-state-notice" name="alert">
|
||||
<p class="alert-message">Waiting on the other party to respond.</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
{# can_act / is_open notices intentionally absent — the "Your turn"
|
||||
and "Waiting on the other party · they have X to respond" wells
|
||||
render directly below and carry the same copy. Same pattern as
|
||||
the dropped accepted-banner — when there's a follow-on action
|
||||
block carrying the message, the alert stripe just orphans a
|
||||
band of color in the middle of the page. #}
|
||||
|
||||
{% if can_act %}
|
||||
<section class="offer-actions well">
|
||||
|
|
|
|||
|
|
@ -4577,7 +4577,7 @@ class TestPricingModePersistence(DatabaseIntegrationTests):
|
|||
fetched = self.dbsession.query(Shop).get(shop_id)
|
||||
self.assertEqual(fetched.offer_auto_accept_threshold_pct, 95)
|
||||
self.assertEqual(fetched.offer_auto_decline_threshold_pct, 50)
|
||||
self.assertEqual(fetched.offer_expiration_hours, 48)
|
||||
self.assertEqual(fetched.offer_expiration_hours, 72)
|
||||
self.assertEqual(fetched.offer_max_rounds, 3)
|
||||
self.assertEqual(fetched.offer_min_buyer_account_age_hours, 0)
|
||||
# Booleans/nullable: offer_enabled defaults None (no server_default set)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue