- create_vehicle endpoints now require make and model; plate is optional; VIN is no longer stored.
- Updated new-vehicle modal: removed VIN field, plate is optional, brand/model marked required.
DELETE /customers/<id> now removes the row.
- Deletes layaways and dependent items/payments.
- Nullifies customer_id in sales, service_orders, fleet_vehicles, plate_vehicles, quotations, returns, warranties, bnpl_transactions, customer_payments.
- Cascade-delete CRM tables are handled by FK constraints.
- get_customer now returns fleet_vehicles assigned to the customer.
- Added DELETE /pos/api/customers/<id> soft-delete (is_active=false) with customers.delete permission.
- Added Vehicles section in customer detail panel.
- Added Eliminar button in quick actions (owner/admin/customers.delete).
- Added customer_id column to fleet_vehicles with FK to customers.
- Enforced customer_id on create_vehicle endpoints (workshop and fleet).
- New vehicle modal now requires a selected customer and stores customer_id.
- Migration v4.13 applied to all tenants.
- Raised z-index of newCustomerModal and newVehicleModal so they appear above the order modal.
- Added '+ Nuevo' customer button in the edit-order modal as well.
- Added POST /pos/api/service-orders/customers endpoint for workshop.edit users.
- Added 'Nuevo cliente' modal reachable from the new service order form.
- After creation the customer is automatically selected in the order.
- Added POST /pos/api/service-orders/vehicles endpoint for workshop.edit users.
- Added 'Nuevo vehiculo' modal in edit order with plate, VIN, make, model, year, color and owner.
- After creation the vehicle is automatically selected in the order.
- Removed 'Control de calidad' from service order pipeline (VALID_TRANSITIONS, status labels, Kanban columns).
- Added editable fields for customer, vehicle, branch, mechanic, priority, mileage, fuel level, estimated completion/cost and reception notes.
- Added customer/vehicle autocomplete in the edit order modal.
- i18n.js now locks currentLang to 'es' and overwrites pos_lang in localStorage.
- Disabled setLang language switching.
- Removed ES/EN toggle from sidebar.
- Bumped i18n.js and sidebar.js cache version on all templates.
- Added DELETE /pos/api/config/branches/<id> that soft-deletes the branch (is_active=false).
- Restricted to owner/admin; main branch cannot be deleted.
- Added 'Eliminar' button in the branches grid for admin/owner.
- Soft-delete service orders via is_deleted flag.
- Added DELETE /pos/api/service-orders/<id> restricted to owner/admin.
- Updated list, detail, summary, status and assignment queries to exclude deleted orders.
- Added 'Eliminar orden' button in the detail modal for administrators.
- Service orders can no longer move backwards through the workshop pipeline.
- Added editable Reception / Diagnosis / Repair / Delivery notes in the detail modal.
- Added inventory-aware autocomplete when attaching parts to a service order.
Updates DELETE /employees/<id> to nullify FK references, remove dependent rows (permissions/sessions), and delete the employee record. Owners remain protected.
- Backend: nuevo endpoint DELETE /employees/<id> que desactiva (soft-delete).
No permite eliminar cuentas de dueno.
- Frontend: boton Eliminar en la tabla de empleados con confirmacion.
- Exponer deleteEmployee en el modulo Config.
Tests: 35 passed
- auth_bp.py: ahora login requiere employee_id. Si el PIN no coincide con
el empleado seleccionado, devuelve 401. Ya no escanea todos los empleados
ni permite entrar como otro usuario con el mismo PIN.
Esto evita que al elegir un usuario se entre como mecanico solo porque
comparten PIN.
- login.html ya no redirige automaticamente si hay token; esto permite
cambiar de usuario en dispositivos compartidos.
- Limpia token/empleado expirados.
- Tras login exitoso, redirige a /pos/workshop para taller/mecanico y a
/pos/catalog para los demas roles.
Esto facilita probar el login con distintos usuarios en La Casita.
- /pos/login redirige a /pos/login2 (no-store).
- /pos/login2 sirve la plantilla actualizada que envia employee_id.
- nginx redirige / a /pos/login2.
Esto evita que navegadores/PWA con cache antigua sigan usando la version
que no enviaba el empleado seleccionado.
- /pos/login ahora redirige a /pos/login?v=34 para evitar que el navegador
use una copia antigua de la pagina de login.
- nginx redirige / a /pos/login?v=34.
Esto asegura que todos los clientes obtengan el login que envia employee_id.