FOLIO: AUD-20260923-004 Secuencia: Auditoría #004 del día 2026-09-23
📅 2026-09-23 · COT 👤 Auditor: Anderson Mares (AMR TECH) ● VIGENTE
AMR Store amrstore.streamingapps.online

AMR Store: Precio Sugerido +20% · Favoritos (localStorage) · CTA WhatsApp

Actualización del catálogo amrstore.streamingapps.online: cards ahora muestran precio sugerido con markup del 20% redondeado al millar más cercano (pesos colombianos), botón de favorito con persistencia localStorage, y botón directo a WhatsApp con mensaje pre-armado.

Cambios implementados

1

Precio Sugerido +20% redondeado al millar

amrstore.php

Las cards ya no muestran el precio interno. Se calcula ceil(price × 1.2 / 1000) × 1000 para obtener un precio de venta limpio en COP. Si el producto no tiene precio base se muestra "Consultar". Un subtexto "Precio sugerido +20%" informa al visitante del margen sugerido.

$_rawPrice = (float)$product['price'];
$_saleAmt  = $_rawPrice > 0 ? (int)(ceil($_rawPrice * 1.2 / 1000) * 1000) : 0;
$_saleStr  = $_saleAmt > 0
    ? '$' . number_format($_saleAmt, 0, ',', '.') . ' COP'
    : 'Consultar';

// Card display:
<div class="price"><?= amrStoreH($_saleStr) ?></div>
<div class="price-note">Precio sugerido +20%</div>
2

Botón de Favorito con localStorage

amrstore.php

Cada card tiene un botón corazón (.fav-btn) que alterna entre far fa-heart (vacío) y fas fa-heart (lleno) vía clase .active. Los IDs de productos favoritos se guardan en localStorage["amrFavs"] y se restauran al cargar la página.

function amrToggleFav(btn) {
    const id  = btn.dataset.fav;
    let favs  = JSON.parse(localStorage.getItem('amrFavs') || '[]');
    const idx = favs.indexOf(id);
    if (idx === -1) { favs.push(id); btn.classList.add('active'); }
    else            { favs.splice(idx, 1); btn.classList.remove('active'); }
    localStorage.setItem('amrFavs', JSON.stringify(favs));
}
// DOMContentLoaded restore en el mismo <script>
3

CTA WhatsApp directo desde la card

amrstore.php

El mini-botón de flecha fue reemplazado por un botón verde WhatsApp (.mini-cta.wa-btn) con mensaje pre-armado que incluye título, categoría, precio calculado e ID del producto. El título/imagen sigue enlazando a la landing de producto /amrstore/producto?id=X.

$_waMsg = "Hola AMR Store. Token: amrstore. Me interesa:\n\n"
    . $product['title'] . "\n"
    . "Categoría: " . $product['category'] . "\n"
    . "Precio: " . $_saleStr . "\n"
    . "ID: " . $product['id'] . "\n\n"
    . "Por favor confirmar disponibilidad y despacho.";
$_waUrl = 'https://wa.me/' . $whatsappNumber . '?text=' . rawurlencode($_waMsg);
4

CSS nuevos estilos: .fav-btn, .wa-btn, .price-note

amrstore.php

Se añadieron las reglas CSS para los nuevos elementos: botón favorito con estados hover y active, botón mini WhatsApp verde, y nota de precio en muted text bajo el precio principal.

.fav-btn { width:44px; height:44px; border-radius:14px; ... }
.fav-btn.active { background:#fef2f2; color:#ef4444; border-color:#fca5a5; }
.mini-cta.wa-btn { background: #16a34a; }
.price-note { font-size:11px; color:var(--muted); font-weight:700; }

Layout de card actualizado

ANTES
Precio interno directo (sin markup)
Solo flecha → WhatsApp o detail
Sin favoritos
DESPUÉS
Precio +20% redondeado al millar + nota
Botón WhatsApp con mensaje completo
Botón ❤ favorito con persistencia
Imagen/título → landing de producto

Archivos modificados

amrstore.php
Card HTML + CSS + JS amrToggleFav() — precio +20%, fav, WA btn
⚡ AMR TECH™ · Desarrollado / Auditado por Anderson Mares