12 Commits

Author SHA1 Message Date
700ddafba4 feat: branch betos — propiedades, oferta de proveedores, chat en contratos y flujo de postulacion renovado
- Sistema de propiedades: tabla, modelo, CRUD API para que el cliente guarde direcciones nombradas
- Postulacion renovada: cliente elige propiedad sin precio ni fecha, sube fotos a GCS/S3
- Proveedores ofertan date_1, date_2 y amount al postularse via pivot; sort por fecha/monto/membresia
- Contratacion: selected_date recibe date_1 o date_2, amount desde pivot (depreca minimun_fee)
- Cancelacion/repostulacion: archive con status=perdido, related_postulation_id para vincular
- Chat en contratos activos: tabla contract_comments, controller, rutas web+API, vista panel, notificaciones bilingues
- PaymentIntent calcula amount desde pivot en vez de recibirlo del front
- getpendingcontracts: sin filtro de tiempo, filtra por status=active, agrega time_created
- Expiracion de postulaciones reducida a 1000 min

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-03 11:26:10 -06:00
0ed98c96ee feat: profile_photo en contratos activos, notificaciones bilingues en reportes y foto en panel usuarios
- API contratos activos (cliente y proveedor): agrega campo profile_photo (técnico asignado o supplier, null si no tiene)
- Notificaciones push bilingues en comentarios de reporte: "Nueva actividad en tu reporte" / "New activity on your report"
- Moderador en web panel notifica a cliente y proveedor al comentar, con prefijo Moderador/Moderator
- Panel usuarios: columna de foto de perfil entre ID y Nombre

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 17:17:14 -06:00
38da1b56ce feat: API de reportes, fix distancia espacial y protección OneSignal
- GET/POST /api/contracts/reports y /api/postulations/reports
- GET/POST /api/contracts/reports/{id}/comments con verificación de autoría
- Fix distancia withinDistanceTo: 0.5 grados → 5000 metros (SRID 4326)
- Fix FK Report::finishedcontracts() → contract_id
- Wrap todas las llamadas OneSignal en try/catch para evitar crashes
- Chat UI de comentarios: burbujas por rol, botón veredicto fijo, estilos
- Botón veredicto movido de reports/index a reports/comments
- Ruta POST veredict y restructura reports/{id}/comments en web

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 21:04:14 -06:00
185da1edbb Fix validación en hero() y CORS para ngrok
- SupplierController: corregir respuesta de error del validador, bank_account acepta numeric, rfc/bank/bank_account required al crear
- Cors: permitir header ngrok-skip-browser-warning

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 09:46:47 -06:00
47f211e4ab Fix validación en hero() y CORS para ngrok
- SupplierController: corregir respuesta de error del validador, bank_account acepta numeric, rfc/bank/bank_account required al crear
- Cors: permitir header ngrok-skip-browser-warning

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 09:45:50 -06:00
b34622b289 Fix búsqueda en tiempo real, paginación, OneSignal, bancos/categorías y vistas auth
- ajaxcrud.js: fix race condition en búsqueda, abort de requests en vuelo
- Layout: mover @yield('js') después de app.js para corregir orden de carga
- Paginación: useBootstrapFour() + eliminar wrappers <ul> duplicados en 17 vistas
- OneSignal: migrar de UserTag iChamba_ID a ExternalId en controladores
- API: agregar endpoint GET /api/banks y campos rfc/bank/bank_account/fee en hero()
- Seeders: BanksSeeder (239 bancos) y CategoriesSeeder (100 categorías)
- Auth views: corregir padding/scroll en register, login, password reset

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 21:21:44 -06:00
21260b645f Fix CORS, timezone y configuraciones para producción
- Actualizar middleware CORS para permitir orígenes de producción y apps móviles
- Cambiar timezone de America/Tijuana a America/Mexico_City en PostulationController
- Agregar configuración de Google Maps
- Agregar servicio de notificaciones push

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 08:59:17 +00:00
689e456fe5 fix: Corregir autenticación API, bypass de pago y relaciones de modelos
- Corregir middleware Authenticate para retornar JSON 401 en rutas API
- Agregar método unauthenticated() en Handler para respuestas JSON
- Implementar bypass de pago en ContractController
- Corregir relaciones belongsToMany en Postulations y Suppliers
- Corregir concatenación de strings en NoHomeController

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 23:48:27 +00:00
f571caa204 Correcciones en controladores de postulaciones y contratos
- Corregir método distance() a withinDistanceTo() para consultas espaciales
- Corregir parsing de fecha/hora con timezone America/Tijuana
- Comentar código de WhatsApp no configurado

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 04:08:12 +00:00
5e3b203f84 Fix: Correcciones panel admin y API frontend
## Panel de Administración

### FormBuilder personalizado (Laravel 11)
- Creado app/Support/FormBuilder.php como reemplazo de laravelcollective/html
- Creado app/Support/Facades/Form.php para el facade
- Registrado en AppServiceProvider y config/app.php
- Soporta: text, email, password, file, textarea, select, checkbox, radio, etc.
- Manejo de valores null en todos los parámetros

### Configuración de sesión
- Cambiado same_site de "none" a "lax" para compatibilidad HTTP
- Corrige error 419 Page Expired en login

### Status CRUD
- Agregado campo en_name al formulario (español/inglés)
- Actualizado StatusController create/update para manejar en_name

### Dependencias
- Instalado spatie/laravel-google-cloud-storage para driver GCS

## API Frontend

### Validaciones de perfil de proveedor
Agregadas validaciones en endpoints que requieren perfil de proveedor:

- SupplierController::getpostulation - Retorna error 400 si no hay perfil
- SupplierController::getcontractedpostulation - Retorna error 400 si no hay perfil
- PostulationController::postulate - Retorna error 400 si no hay perfil
- PostulationController::getfinishedpostulations - Retorna error 400 si no hay perfil
- ContractController::startcontract - Retorna error 400 si no hay perfil

### Null safety en contratos
- ContractController::getcurrentcontracts - Manejo seguro de supplier/category null
- ContractController::getfinishedcontracts - Manejo seguro de supplier/category/status null

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 23:16:34 +00:00
46469deaa8 Upgrade: Laravel 11, consolidación modelos App\Models\
- Actualización a Laravel 11.47.0
- Migración de modelos a namespace App\Models\
- Actualización de todos los controladores
- Actualización de configuraciones
- Documentación README.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 22:07:34 +00:00
d63e4e823a First commit 2026-01-13 20:46:44 -06:00