Limpiar legacy delivery_* + arreglar carga del mapa en shadow DOM

Backend cleanup (todo el delivery vive ahora en delivery_zones.zones[]):
- Migration drop columns delivery_enabled / delivery_days / delivery_hours_start /
  delivery_hours_end / delivery_min_order y limpieza de schedule.delivery JSONB.
- settingsRepo: SELECT/INSERT/UPDATE sólo con campos vigentes, formatScheduleHours
  trabaja sobre pickup.
- handlers/settings: defaults sin legacy, validateSchedule sólo para pickup,
  validateDeliveryZones nuevo (estructura GeoJSON + días).
- seed_piaf_settings_and_replies + tenant_settings migrations alineadas: schedule
  sólo tiene pickup, delivery_zones queda en {} para reconfigurar via UI.

Frontend cleanup:
- settings-crud: borrado el panel "Delivery (Envío a domicilio)" + minOrder,
  toggle deliveryEnabled, y el grid schedule.delivery. collectScheduleFromInputs
  ahora sólo procesa pickup. save() ya no envía delivery_enabled/min_order.

Fix mapa (no cargaba):
- zone-map-editor: los <link> a leaflet.css/leaflet-geoman.css se inyectaban en
  document.head, que NO cruza el shadow DOM de settings-crud, por lo que las
  reglas de Leaflet no aplicaban al div del mapa. Ahora los <link> se anclan
  como hijos del propio web component; al estar en light DOM dentro del shadow
  root del padre, sí aplican.
- Espera explícita a que el stylesheet cargue antes de instanciar L.map.
- ResizeObserver + invalidateSize() para cuando el contenedor cambia tamaño
  (router muestra/oculta panel, tabs, etc).

Smoke E2E sin regresión: 1kg vacío + envío → location en Centro → "martes 12hs"
→ orden confirmada con $28.000 (producto + envío). 157/157 tests verde.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Lucas Tettamanti
2026-05-02 15:37:47 -03:00
parent aed79078de
commit c93955fa55
6 changed files with 219 additions and 394 deletions

View File

@@ -8,33 +8,18 @@ UPDATE tenant_settings
SET
store_name = COALESCE(NULLIF(store_name, 'Mi Negocio'), 'Piaf'),
bot_name = COALESCE(NULLIF(bot_name, 'Bot'), 'Piaf'),
delivery_enabled = true,
pickup_enabled = true,
schedule = '{
"delivery": {
"mon": {"enabled": true, "start": "09:00", "end": "13:00"},
"tue": {"enabled": true, "start": "09:00", "end": "13:00"},
"wed": {"enabled": true, "start": "09:00", "end": "13:00"},
"thu": {"enabled": true, "start": "09:00", "end": "13:00"},
"fri": {"enabled": true, "start": "09:00", "end": "13:00"},
"sat": {"enabled": true, "start": "09:00", "end": "13:00"},
"sun": {"enabled": false}
},
"pickup": {
"mon": {"enabled": true, "start": "09:00", "end": "20:00"},
"tue": {"enabled": true, "start": "09:00", "end": "20:00"},
"wed": {"enabled": true, "start": "09:00", "end": "20:00"},
"thu": {"enabled": true, "start": "09:00", "end": "20:00"},
"fri": {"enabled": true, "start": "09:00", "end": "20:00"},
"sat": {"enabled": true, "start": "09:00", "end": "13:00"},
"sun": {"enabled": false}
"lun": {"enabled": true, "start": "09:00", "end": "20:00"},
"mar": {"enabled": true, "start": "09:00", "end": "20:00"},
"mie": {"enabled": true, "start": "09:00", "end": "20:00"},
"jue": {"enabled": true, "start": "09:00", "end": "20:00"},
"vie": {"enabled": true, "start": "09:00", "end": "20:00"},
"sab": {"enabled": true, "start": "09:00", "end": "13:00"}
}
}'::jsonb,
delivery_zones = '{
"caba": {
"barrios": ["Palermo", "Belgrano", "Recoleta", "Villa Crespo", "Almagro", "Caballito", "Núñez", "Colegiales", "Chacarita", "Las Cañitas"]
}
}'::jsonb
delivery_zones = '{}'::jsonb
WHERE tenant_id = 'eb71b9a7-9ccf-430e-9b25-951a0c589c0f'::uuid;
-- 2) reply_templates: seed con DEFAULTS de replyTemplates.js para piaf