feat(workshop): add vehicle from service order
Some checks failed
CI / lint-and-test (3.11) (push) Has been cancelled
CI / lint-and-test (3.13) (push) Has been cancelled

- 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.
This commit is contained in:
2026-06-30 19:33:07 +00:00
parent ff600ed7df
commit 52cb01eb4e
3 changed files with 136 additions and 4 deletions

View File

@@ -15,7 +15,7 @@
<meta name="theme-color" content="#F5A623" />
<link rel="shortcut icon" type="image/png" href="/pos/static/pwa/icon-192.png" />
<link rel="stylesheet" href="/pos/static/css/workshop.css?v=36">
<link rel="stylesheet" href="/pos/static/css/workshop.css?v=37">
<style>
.so-notes-grid { display: grid; grid-template-columns: 120px 1fr; gap: var(--space-2); align-items: start; }
.so-notes-grid .form-label { margin: 0; padding-top: var(--space-2); }
@@ -261,8 +261,13 @@
</div>
<div class="form-field form-field--span2" style="position:relative;">
<label class="form-label" for="eoVehicleSearch">Veh&iacute;culo</label>
<input class="form-input" id="eoVehicleSearch" autocomplete="off" placeholder="Buscar por placa..." oninput="Workshop.searchVehiclesForSO()" />
<div id="eoVehicleResults" style="display:none;position:absolute;z-index:10;top:100%;left:0;right:0;max-height:180px;overflow-y:auto;background:#fff;border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:0 4px 12px rgba(0,0,0,.15);"></div>
<div style="display:flex;gap:var(--space-2);">
<div style="position:relative;flex:1;">
<input class="form-input" id="eoVehicleSearch" autocomplete="off" placeholder="Buscar por placa..." oninput="Workshop.searchVehiclesForSO()" />
<div id="eoVehicleResults" style="display:none;position:absolute;z-index:10;top:100%;left:0;right:0;max-height:180px;overflow-y:auto;background:#fff;border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:0 4px 12px rgba(0,0,0,.15);"></div>
</div>
<button class="btn btn--secondary" type="button" onclick="Workshop.openNewVehicleModal()">+ Nuevo</button>
</div>
<input type="hidden" id="eoVehicleId" />
</div>
<div class="form-field">
@@ -322,6 +327,52 @@
</div>
</div>
<!-- New vehicle modal -->
<div class="modal-overlay" id="newVehicleModal">
<div class="modal modal--sm">
<div class="modal__header">
<h2 class="modal__title">Nuevo veh&iacute;culo</h2>
<button class="modal__close" onclick="Workshop.closeNewVehicleModal()">&times;</button>
</div>
<div class="modal__body">
<form class="form-grid" id="newVehicleForm" onsubmit="return false;">
<div class="form-field">
<label class="form-label" for="nvPlate">Placa *</label>
<input class="form-input" id="nvPlate" placeholder="Ej. ABC-123" />
</div>
<div class="form-field">
<label class="form-label" for="nvVIN">VIN</label>
<input class="form-input" id="nvVIN" placeholder="N&uacute;mero de serie" />
</div>
<div class="form-field">
<label class="form-label" for="nvMake">Marca</label>
<input class="form-input" id="nvMake" placeholder="Ej. Nissan" />
</div>
<div class="form-field">
<label class="form-label" for="nvModel">Modelo</label>
<input class="form-input" id="nvModel" placeholder="Ej. Versa" />
</div>
<div class="form-field">
<label class="form-label" for="nvYear">A&ntilde;o</label>
<input class="form-input" id="nvYear" type="number" placeholder="2020" />
</div>
<div class="form-field">
<label class="form-label" for="nvColor">Color</label>
<input class="form-input" id="nvColor" placeholder="Ej. Blanco" />
</div>
<div class="form-field form-field--span2">
<label class="form-label" for="nvOwner">Due&ntilde;o</label>
<input class="form-input" id="nvOwner" placeholder="Nombre del due&ntilde;o" />
</div>
</form>
</div>
<div class="modal__footer">
<button class="btn btn--ghost" onclick="Workshop.closeNewVehicleModal()">Cancelar</button>
<button class="btn btn--primary" onclick="Workshop.saveNewVehicle()">Guardar veh&iacute;culo</button>
</div>
</div>
</div>
<!-- Catalog modal -->
<div class="modal-overlay" id="catalogModal">
<div class="modal modal--lg">
@@ -378,7 +429,7 @@
<script src="/pos/static/js/pos-utils.js?v=33" defer></script>
<script src="/pos/static/js/sidebar.js?v=36" defer></script>
<script src="/pos/static/js/offline-banner.js" defer></script>
<script src="/pos/static/js/workshop.js?v=36" defer></script>
<script src="/pos/static/js/workshop.js?v=37" defer></script>
<script>if('serviceWorker' in navigator){navigator.serviceWorker.register('/pos/sw.js',{scope:'/pos/'});}</script>
<script src="/pos/static/js/pwa-install.js" defer></script>
<script src="/pos/static/js/chat.js" defer></script>